#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int MINF = 3e6+5;
int t,n,m,dep,ans;
struct node {
int name[99],count;
};
node tree[MINF];
inline int in_make() {
memset(tree[dep].name,-1,sizeof(tree[dep].name));
tree[dep].count = 0;
return dep++;
}
inline void push_make(string s) {
int r=0;
for(int i=0;i<s.size();i++) {
int son;
if('A'<=s[i] && s[i] <= 'Z') {son = s[i] - 'A'+40;}
else if('a'<=s[i] && s[i] <= 'z') {son = s[i]-'a'+20;}
else {son = s[i]-'0';}
if(tree[r].name[son] == -1 ) {
tree[r].name[son] = in_make();
}
r = tree[r].name[son];
tree[r].count++;
}
}
inline int find_word(string s) {
int r=0;
for(int i=0;i<s.size();i++) {
int son;
if('A'<=s[i] && s[i] <= 'Z') {son = s[i] - 'A'+30;}
else if('a'<=s[i] && s[i] <= 'z'){son = s[i]-'a'+20;}
else {son = s[i]-'0';}
if(tree[r].name[son] == -1 ) {
return 0;
}
r = tree[r].name[son];
}
return tree[r].count;
}
void f() {
freopen("Trie.in","r",stdin);
freopen("Trie.out","w",stdout);
}
int main(void) {
std::ios::sync_with_stdio(false);
cin>>t;
while(t) {
t--;dep=0,ans=0;
cin>>n>>m;
in_make();
for(int i=1;i<=n;i++) {
string s;
cin>>s;
push_make(s);
}
for(int i=1;i<=m;i++) {
string s;
cin>>s;
ans=find_word(s);
cout<<ans<<endl;
}
}
return 0;
}