#include #include #include #include std::vector> seq; std::vector query; void precalculate() { int curr_l = 1; for (int i = 1; i < query.size(); i++) { if (query[i] < query[i-1]) { // std::cout << "FOUND: X = " << curr_l << " Y = " << i << std::endl; seq.push_back({curr_l, i}); curr_l = i+1; } } seq.push_back({curr_l, query.size()}); // std::cout << "FOUND: X = " << curr_l << " Y = " << query.size() << std::endl; } bool comp(const std::pair a, int val) { return a.first < val; } int main() { int n, q; std::cin >> n >> q; query.resize(n); for (int i = 0; i < n; i++) { int x; std::cin >> x; query[i] = x; } precalculate(); for (int a = 0; a < q; a++) { int l, r; std::cin >> l >> r; auto found_pair = std::lower_bound(seq.begin(), seq.end()-1, l, comp); bool flag = false; flag = ((l >= found_pair->first) && (l <= found_pair->second) && (r >= found_pair->first) && (r <= found_pair->second)) || (l == r); if (flag) { std::cout << "YES" << std::endl; } else { std::cout << "NO" << std::endl; } } }