#include<bits/stdc++.h>
using namespace std;
char trie[3000005][65];
int n,T,q;
int c,idx,cnt[3000005];//记录同根节点的串
string tmp;
void insert(string s){
int p=0,lens=s.size()-1;
for(int i = 0 ; i <= lens ; i++){
if(s[i]>='A'&&s[i]<='Z'){
c=s[i]-'A';
}
else if(s[i]>='a'&&s[i]<='z'){
c=s[i]-'a'+26;
}
else{
c=s[i]-'0'+52;
}
if(!trie[p][c]){
trie[p][c]=++idx;//当前是第idx个节点
}
p=trie[p][c];//访问下一个字符
cnt[p]++;
}
}
int find(string s){
int p=0,lens=s.size()-1;
for(int i = 0 ; i <= lens ; i++){
if(s[i]>='A'&&s[i]<='Z'){
c=s[i]-'A';
}
else if(s[i]>='a'&&s[i]<='z'){
c=s[i]-'a'+26;
}
else{
c=s[i]-'0'+52;
}
if(!trie[p][c]){
return 0;//不存在这个点
}
p=trie[p][c];
}
return cnt[p];//记录同根节点的串
}
int main(){
cin>>T;
while(T--){
idx=0;
memset(trie,0,sizeof(trie));
memset(cnt,0,sizeof(cnt));
cin>>n>>q;
for(int i = 1 ; i <= n ; i++){
cin>>tmp;
insert(tmp);
}
for(int i = 1 ; i <= q ; i++){
cin>>tmp;
cout<<find(tmp)<<endl;
}
}
return 0;
}