#include using namespace std; using LL = long long; using ULL = unsigned long long; #define rep(i,n) for(int i=0; i<(n); i++) struct AddQuery{ int t; int p,x; bool operator<(const AddQuery& r)const{ return t V; vector AQ; vector SQ; BIT(vector v){ N=v.size(); V.resize(N+1); rep(i,N) V[i+1]=v[i]; rep(i,N+1){ if(i) if(i+(i&-i)<=N) V[i+(i&-i)]+=V[i]; } } void add(int p,int v){ p++; while(p<=N){ V[p]+=v; p+=p&-p; } } int sum(int r){ int a=0; while(r){ a+=V[r]; r-=r&-r; } return a; } void proc(){ sort(AQ.begin(),AQ.end()); sort(SQ.begin(),SQ.end()); int pAQ=0, pSQ=0; while(true){ int tg=-1; if(AQ.size()==pAQ){ if(SQ.size()==pSQ) break; tg=1; } else if(SQ.size()==pSQ) tg=0; else if(AQ[pAQ].t>N>>Q; vector A(N); rep(i,N) cin>>A[i]; BIT G(vector(N,0)); { vector L(N,-1); stack H; rep(i,N){ while(H.size()){ if(A[H.top()]>A[i]) break; H.pop(); } if(H.empty()) L[i]=-1; else L[i]=H.top(); H.push(i); } rep(i,N){ G.AQ.push_back({L[i]*2+1,i,1}); G.AQ.push_back({i*2+1,i,-1}); } } vector ans(Q,0); rep(i,Q){ int c; cin>>c; int l,r; cin>>l>>r; l--; G.SQ.push_back({l*2,r,1,&ans[i]}); } G.proc(); rep(i,Q) cout<