#include #include #include #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() using namespace std; using namespace atcoder; using ll=long long; using ld=long double; using vll=vector; using vvll=vector; using vi=vector; using vvi=vector; using pll=pair; using pi=pair; // using mint=modint998244353; using mint=modint1000000007; // using mint2=static_modint<2>; // using BoostPoint=boost::polygon::point_data; // using Voronoi=boost::polygon::voronoi_diagram; // using mint=LazyMontgomeryModInt<998244353>; using vm=vector; // using vvm=vector; #line 2 "data-structure/sparse-table.hpp" #include #include #include using namespace std; template struct SparseTable { inline static constexpr T INF = numeric_limits::max() / 2; int N; vector > table; T f(T a, T b) { return min(a, b); } SparseTable() {} SparseTable(const vector &v) : N(v.size()) { int b = 1; while ((1 << b) <= N) ++b; table.push_back(v); for (int i = 1; i < b; i++) { table.push_back(vector(N, INF)); for (int j = 0; j + (1 << i) <= N; j++) { table[i][j] = f(table[i - 1][j], table[i - 1][j + (1 << (i - 1))]); } } } // [l, r) T query(int l, int r) { assert(0 <= l and l <= r and r <= N); if (l == r) return INF; int b = 31 - __builtin_clz(r - l); return f(table[b][l], table[b][r - (1 << b)]); } }; /** * @brief Sparse Table */ int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N,Q; cin>>N>>Q; vi A(N+2),d(N+2),stk; rep(i,1,N+1)cin>>A[i]; A[N+1]=N+1,stk.push_back(N+1); rrep(i,1,N+1){ while(A[stk.back()]rmq(d); while(Q--){ int l,r; cin>>l>>r; int mind=rmq.query(l,r+1); cout<