#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; int sz; vector seg[1<<18]; vector mx[1<<18]; vector sum[1<<18]; int a[1<<17]; void find(int a, int b, int k, int l, int r, vector

& v){ if(r<=a || b<=l) return; if(a<=l && r<=b){ v.push_back({k, l}); }else{ find(a, b, 2*k+1, l, (l+r)/2, v); find(a, b, 2*k+2, (l+r)/2, r, v); } } int query(vector

v){ int ret=0; int mx0=0; for(auto p:v){ int k=p.first; if(seg[k].empty()) continue; int t=lower_bound(mx[k].begin(), mx[k].end(), mx0)-mx[k].begin(); ret+=sum[k].back()-sum[k][t-1]; mx0=max(mx0, mx[k].back()); } return ret; } int main() { int n, q; cin>>n>>q; for(int i=0; i>a[i]; sz=1; while(sz=0; i--){ for(auto x:seg[2*i+1]) seg[i].push_back(x); for(auto x:seg[2*i+2]) seg[i].push_back(x); sum[i].resize(seg[i].size()+1); mx[i].resize(seg[i].size()+1); mx[i][0]=-1; for(int j=0; j>t>>l>>r; vector

v; find(l-1, r, 0, 0, sz, v); cout<