#include <bits/stdc++.h>
using namespace std;
int trans(char c) {
if (c >= 'a' && c <= 'z') return c - 'a' + 1;
else if (c >= 'A' && c <= 'Z') return c - 'A' + 27;
else if (c >= '0' && c <= '9') return c - '0' + 53;
else return 0;
}
const int MAXN = 3e6 + 10;
int tot = 1, ch[MAXN][70], sz[MAXN];
int tmp_len;//插入字符串的长度
char tmp[MAXN];//插入字符串
void insert() {//
int u = 1;
sz[1]++;
for (int i = 1; i <= tmp_len; ++i) {
if (!ch[u][trans(tmp[i])]) {
ch[u][trans(tmp[i])] = ++tot;
}
u = ch[u][trans(tmp[i])];
sz[u]++;
}
}
int query() {
int u = 1;
for (int i = 1; i <= tmp_len; ++i) {
if (!ch[u][trans(tmp[i])]) {
return 0;
}
u = ch[u][trans(tmp[i])];
}
return sz[u];
}
signed main() {
int T; cin >> T;
while(T--){
for (int i = 1; i <= tot; ++i) {
sz[i] = 0;
for (int j = 0; j < 62; ++j) {
ch[i][j] = 0;
}
}
tot = 1;
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> tmp + 1;
tmp_len = strlen(tmp + 1);
insert();
}
for (int i = 1; i <= m; ++i) {
cin >> tmp + 1;
tmp_len = strlen(tmp + 1);
cout << query() << '\n';
}
}
return 0;
}
求调