#include using namespace std; typedef long long int uli; const int mx=5e4+10; char t[mx]; int s[mx],d[mx],ans[mx]; vector >g[mx]; const int mxt=(mx<<2); struct node{ int v,lp; }; struct segTree{ node st[mxt]; void mrg(node &a,node &b,node &c){ c.v=max(a.v,b.v); } void init(int u,int l,int r){ st[u]={0,0}; if(l!=r){ int mid=(l+r)>>1; init(u+u+1,l,mid); init(u+u+2,mid+1,r); mrg(st[u+u+1],st[u+u+2],st[u]); } } void clr(int u,int l,int r){ if(l==r)return; int lp=st[u].lp; //propagate st[u+u+1].lp+=lp; st[u+u+1].v+=lp; st[u+u+2].lp+=lp; st[u+u+2].v+=lp; st[u].lp=0; } void upd(int u,int l,int r,int f,int t,int x){ if(r0)clr(u,l,r); if(f<=l && r<=t){ st[u].lp+=x; st[u].v+=x; } else{ int mid=(l+r)>>1; upd(u+u+1,l,mid,f,t,x); upd(u+u+2,mid+1,r,f,t,x); mrg(st[u+u+1],st[u+u+2],st[u]); } } /* node qry(int u,int l,int r,int f,int t){ if(f<=l && r<=t)return st[u]; if(st[u].lp>0)clr(u,l,r); int mid=(l+r)>>1; if(t<=mid)return qry(u+u+1,l,mid,f,t); if(f>mid)return qry(u+u+2,mid+1,r,f,t); node x=qry(u+u+1,l,mid, f,mid); node y=qry(u+u+2,mid+1,r,mid+1,t); node ans; mrg(x,y,ans); return ans; } */ }; segTree tree[2]; int main(){ int T,m,n; scanf("%d",&T); while(T--){ scanf("%d %d",&m,&n); for(int i=0;i<=m;i++)g[i].clear(); for(int i=0;i