#include using namespace std; const int N = 50050; struct SegmentTree{ int it[N << 2]; int lazy[N << 3]; #define mid ((l + r) >> 1) void Init(){ memset(it, 0, sizeof it); memset(lazy, 0, sizeof lazy); } void push(int x){ it[x] += lazy[x]; lazy[x + x] += lazy[x]; lazy[x + x + 1] += lazy[x]; lazy[x] = 0; } void update(int x, int l, int r, int u, int v){ push(x); if(l > v || r < u) return; if(l >= u && r <= v){ lazy[x]++; push(x); return; } update(x + x, l, mid, u, v); update(x + x + 1, mid + 1, r, u, v); it[x] = max(it[x + x], it[x + x + 1]); } void modify(int x, int l, int r, int pos, int val){ push(x); if(l > pos || r < pos) return; it[x] = max(it[x], val); if(l == r) return; modify(x + x, l, mid, pos, val); modify(x + x + 1, mid + 1, r, pos, val); it[x] = max(it[x + x], it[x + x + 1]); } int query(int x, int l, int r, int u, int v){ push(x); if(u > v) return 0; if(l > v || r < u) return 0; if(l >= u && r <= v) return it[x]; int ret = max(query(x + x, l, mid, u, v), query(x + x + 1, mid + 1, r, u, v)); it[x] = max(it[x + x], it[x + x + 1]); return ret; } }smt[2]; int n, m; int t[N]; int s[N]; int d[N]; int f[N]; vector < int > adj[N][2]; int main(){ if(fopen("1.inp", "r")){ freopen("1.inp", "r", stdin); } int T; scanf("%d", &T); while(T--){ smt[0].Init(); smt[1].Init(); scanf("%d%d", &n, &m); for(int i = 1; i <= n; ++i){ adj[i][0].clear(); adj[i][1].clear(); } for(int i = 1; i <= m; ++i){ char read[2]; scanf("%s", read); if(read[0] == 'E' || read[0] == 'C') t[i] = 1; else t[i] = 0; } for(int i = 1; i <= m; ++i){ scanf("%d", s + i); } for(int i = 1; i <= m; ++i){ scanf("%d", d + i); if(s[i] < d[i]){ adj[s[i]][t[i]].push_back(d[i]); } } for(int x = 1; x <= n; ++x){ for(int i = 0; i < 2; ++i){ for(int r : adj[x][i]){ if(r < n) smt[i].update(1, 1, n, r + 1, n); int best = max(smt[1 - i].query(1, 1, n, 1, x), smt[i].query(1, 1, n, 1, r)) + 1; smt[i].modify(1, 1, n, r, best); } } f[x] = max(smt[0].query(1, 1, n, 1, x), smt[1].query(1, 1, n, 1, x)); } for(int i = 1; i <= m; ++i){ int a = lower_bound(f + 1, f + n + 1, i) - f; printf("%d ", (a > n ? -1 : a)); } puts(""); } return 0; }