#include using namespace std; using Int = long long; template struct SegmentTree{ typedef function F; typedef function G; typedef function H; typedef function P; Int n; F f; G g; H h; P p; T d1; E d0; vector dat; vector laz; SegmentTree(){} SegmentTree(Int n_,F f,G g,H h,T d1,E d0, vector v=vector(),P p=[](E a,Int b){return a;}): f(f),g(g),h(h),d1(d1),d0(d0),p(p){ init(n_); if(n_==(Int)v.size()) build(n_,v); } void init(Int n_){ n=1; while(n v){ for(Int i=0;i=0;i--) dat[i]=f(dat[i*2+1],dat[i*2+2]); } inline void eval(Int len,Int k){ if(laz[k]==d0) return; if(k*2+10) update(a,a+1,k); } T query(Int a){ return query(0,a+1); } }; signed main(){ Int T; cin>>T; while(T--){ Int m,n; cin>>m>>n; vector t(n); vector s(n),d(n); for(Int i=0;i>t[i]; for(Int i=0;i>s[i]; for(Int i=0;i>d[i]; vector< vector > > v(2,vector >(m+1)); for(Int i=0;id[i]) continue; v[t[i]=='E'||t[i]=='C'][s[i]].emplace_back(d[i]); } vector > seg(2); auto f=[](Int a,Int b){return max(a,b);}; auto g=[](Int a,Int b){return a+b;}; seg[0]=seg[1]=SegmentTree(m+1,f,g,g,0,0); const Int debug=0; auto pri=[&]{ for(Int k=0;k<2;k++){ for(Int i=0;i<=m;i++) cout<<" "< ans(n+2,-1); for(Int i=0;i0;i--){ if(ans[i+1]<0) continue; if(ans[i]<0||ans[i+1]