#include using namespace std; const int maxn = 50010; int m, n, t; int s[maxn], d[maxn], c[maxn], f[maxn]; pair it[2][maxn * 4]; vector> adj[maxn]; void build(int t, int x, int l, int r){ if (l == r){ it[t][x] = {0, 0}; return; } int mid = (l + r) / 2; build(t, x * 2, l, mid); build(t, x * 2 + 1, mid + 1, r); it[t][x] = {0, 0}; } void update_lazy(int t, int x, int l, int r, int d, int c){ if (l > c || r < d) return; if (l >= d && r <= c){ it[t][x].second += 1; it[t][x].first += 1; return; } int mid = (l + r) / 2; update_lazy(t, x * 2, l, mid, d, c); update_lazy(t, x * 2 + 1, mid + 1, r, d, c); it[t][x].first = max(it[t][x * 2].first, it[t][x * 2 + 1].first) + it[t][x].second; } void update(int t, int x, int l, int r, int p, int v){ if (l == r){ it[t][x] = {v, 0}; return; } int mid = (l + r) / 2; it[t][x * 2].second += it[t][x].second; it[t][x * 2].first += it[t][x].second; it[t][x * 2 + 1].second += it[t][x].second; it[t][x * 2 + 1].first += it[t][x].second; it[t][x].second = 0; if (p <= mid) update(t, x * 2, l, mid, p, v); else update(t, x * 2 + 1, mid + 1, r, p, v); it[t][x].first = max(it[t][x * 2].first, it[t][x * 2 + 1].first) + it[t][x].second; } void solve(){ scanf("%d %d", &m, &n); for (int i = 1; i <= m; i++) adj[i].clear(); for (int i = 1; i <= n; i++){ char ch; scanf("%c", &ch); while (ch != 'E' && ch != 'D' && ch != 'C' && ch != 'M') scanf("%c", &ch); if (ch == 'E' || ch == 'C') c[i] = 0; else c[i] = 1; } for (int i = 1; i <= n; i++) scanf("%d", &s[i]); for (int i = 1; i <= n; i++) scanf("%d", &d[i]); for (int i = 1; i <= n; i++) if (s[i] < d[i]) adj[d[i]].push_back({s[i], c[i]}); build(0, 1, 1, m); build(1, 1, 1, m); for (int i = 1; i <= m; i++) f[i] = 0; for (int i = 1; i <= m; i++){ f[i] = max(f[i], f[i - 1]); for (int j = 0; j < adj[i].size(); j++){ update_lazy(adj[i][j].second, 1, 1, m, 1, adj[i][j].first); f[i] = max(f[i], it[adj[i][j].second][1].first); } update(0, 1, 1, m, i, f[i]); update(1, 1, 1, m, i, f[i]); //cout << f[i] << endl; } int j = 1; for (int i = 1; i <= m; i++) while (f[i] >= j){ printf("%d ", i); j++; } for (int i = j; i <= n; i++) printf("-1 "); printf("\n"); } int main(){ scanf("%d", &t); for (int i = 1; i <= t; i++) solve(); return 0; }