#include #include #include #include using namespace std; //1-indexed #include template struct BIT{ int n; vectorbit; BIT(int n_=0):n(n_),bit(n_+1){} T sum(int i) { T ans=0; for(;i>0;i-=i&-i)ans+=bit[i]; return ans; } void add(int i,T a) { if(i==0)return; for(;i<=n;i+=i&-i)bit[i]+=a; } int lower_bound(T k)//k<=sum(ret) { if(k<=0)return 0; int ret=0,i=1; while((i<<1)<=n)i<<=1; for(;i;i>>=1) if(ret+i<=n&&bit[ret+i] >AL,A; vector,int> >Q; int N,QQ; int ans[1<<17]; main() { cin>>N>>QQ; for(int i=1;i<=N;i++) { int a;cin>>a; A.push_back(make_pair(a,i)); } sort(A.begin(),A.end()); reverse(A.begin(),A.end()); setLIM; LIM.insert(N+1); for(paira:A) { int id=N+1-a.second; int x=N+2-*LIM.lower_bound(id); LIM.insert(id); AL.push_back(make_pair(x,a.second)); } sort(AL.begin(),AL.end()); for(int i=0;i>id>>l>>r; Q.push_back(make_pair(make_pair(l,r),i)); } sort(Q.begin(),Q.end()); BITbit(N); int ai=0; for(pair,int>q:Q) { while(ai