#include using namespace std; #define ll long long int #define mp make_pair #define mod 1000000007 #define ff first #define ss second vector v1[50001][2],tree[800001][2],v[200001][2],fake,dest[50001][2]; vector :: iterator it,it1; ll s[50001],d[50001],id[50001],fk_st[50001],fk_en[50001]; pair dp[50001][2]; void build(ll node,ll st,ll en) { if(st>en) return ; if(st==en) { tree[node][0]=v[st][0]; tree[node][1]=v[st][1]; return ; } ll mid=(st+en)/2; build(2*node+1,st,mid); build(2*node+2,mid+1,en); int i; for(i=0;i<=1;i++) { it=tree[2*node+1][i].begin(); it1=tree[2*node+2][i].begin(); while(it!=tree[2*node+1][i].end()&&it1!=tree[2*node+2][i].end()) { if(*it<*it1) { tree[node][i].push_back(*it); it++; } else { tree[node][i].push_back(*it1); it1++; } } while(it!=tree[2*node+1][i].end()) { tree[node][i].push_back(*it); it++; } while(it1!=tree[2*node+2][i].end()) { tree[node][i].push_back(*it1); it1++; } } } ll query(ll node,ll st,ll en,ll l,ll r,ll x,ll ty) { if(ren) return 1000000000; if(l<=st&&en<=r) { it=lower_bound(tree[node][ty].begin(),tree[node][ty].end(),x); if(it==tree[node][ty].end()) return 1000000000; return *it; } ll mid=(st+en)/2; ll p1=query(2*node+1,st,mid,l,r,x,ty); ll p2=query(2*node+2,mid+1,en,l,r,x,ty); return min(p1,p2); } int main() { ios::sync_with_stdio(0); cin.tie(0); ll t,m,n,val1,val2,l0p_lp0,l0p_lp1,l1p_lp0,l1p_lp1,i,j,c,d1,maxi,cnt,k,m1; char c1; cin>>t; while(t--) { cin>>m>>n; for(i=0;i<=m;i++) { v1[i][0].clear(); v1[i][1].clear(); dest[i][0].clear(); dest[i][1].clear(); } fake.clear(); for(i=0;i>c1; if(c1=='E'||c1=='C') id[i]=0; else id[i]=1; } for(i=0;i>s[i]; for(i=0;i>d[i]; v1[s[i]][id[i]].push_back(d[i]); dest[d[i]][id[i]].push_back(s[i]); } fake.push_back(0); for(i=1;i<=m;i++) { maxi=1; for(k=0;k<=1;k++) { sort(dest[i][k].begin(),dest[i][k].end()); c=-1; cnt=0; for(j=0;jval2) dp[i][0]={val2,l1p_lp1}; else dp[i][0]={val1,min(l1p_lp0,l1p_lp1)}; val1=query(0,1,m1,l0p_lp0,m1,l0p_lp0+1,1); val2=query(0,1,m1,l0p_lp1,m1,l1p_lp1+1,1); if(val1val2) dp[i][1]={l0p_lp1,val2}; else dp[i][1]={min(l0p_lp0,l0p_lp1),val1}; } for(i=1;i<=n;i++) { val1=min(dp[i][0].ff,dp[i][1].ss); if(val1==1000000000) val1=-1; if(val1==-1) cout<