#include using namespace std; #define ll long long #define f(i, x, n) for(int i = x; i < (int)(n); ++i) int const N = 50000; int tp[N], sr[N], n, m, s[2][N << 2 | 1], z[2][N << 2 | 1], an[N + 1]; char in[2]; vector ev[N + 1]; inline void sl(int s[], int z[], int id, int a, int b){ if (z[id]){ s[a] += z[id]; s[b] += z[id]; z[a] += z[id]; z[b] += z[id]; z[id] = 0; } } void ad(int s[], int z[], int c, int x, int y, int l = 0, int r = m + 1, int id = 1){ if (x >= r || y <= l)return; if (l >= x && r <= y) { s[id] += c, z[id] += c; return; } int m = l + r >> 1, a = id << 1, b = a | 1; sl(s, z, id, a, b); ad(s, z, c, x, y, l, m, a); ad(s, z, c, x, y, m, r, b); s[id] = max(s[a], s[b]); } int gt(int s[], int z[], int x, int y, int l = 0, int r = m + 1, int id = 1){ if (x >= r || y <= l)return 0; if (l >= x && r <= y)return s[id]; int m = l + r >> 1, a = id << 1, b = a | 1; sl(s, z, id, a, b); return max(gt(s, z, x, y, l, m, a), gt(s, z, x, y, m, r, b)); } int main(){ int t; scanf("%d", &t); while (t--){ f(i, 0, 2)f(j, 0, N << 2 | 1)s[i][j] = 0; f(i, 0, 2)f(j, 0, N << 2 | 1)z[i][j] = 0; f(i, 0, N + 1)an[i] = 0; f(i, 0, N + 1)ev[i].clear(); scanf("%d%d", &m, &n); f(i, 0, n){ scanf("%s", in); if (in[0] == 'E' || in[0] == 'C')tp[i] = 0; else tp[i] = 1; } f(i, 0, n)scanf("%d", sr + i); f(i, 0, n){ int d; scanf("%d", &d); if (d < sr[i])continue; ev[d].push_back(i); } f(i, 1, m + 1){ f(j, 0, ev[i].size()){ int k = ev[i][j], t = tp[k]; ad(s[t ^ 1], z[t ^ 1], 1, 0, sr[k] + 1); } int x[2] = {}; f(j, 0, 2)x[j] = gt(s[j ^ 1], z[j ^ 1], 0, i); an[i] = max(an[i - 1], max(x[0], x[1])); f(j, 0, 2)ad(s[j], z[j], an[i], i, i + 1); } int l = 1; f(i, 1, n + 1){ while (l <= m && an[l] < i)++l; if (i != 1)printf(" "); printf("%d", l <= m ? l : -1); } printf("\n"); } }