#include<bits/stdc++.h>
using namespace std;
struct Node{
int f,ch,js;
int z[63];
}a[3000001];
int tot=0;
int ss(char c){
if(c>='a'&&c<='z'){
return c-'a'+1;
}
else if(c>='A'&&c<='Z'){
return c-'A'+27;
}
else{
return c-'0'+53;
}
}
void insert(string s){
int len=s.size();
int x=0;
a[x].js++;
for(int i=0;i<len;i++){
if(a[x].z[ss(s[i])]==0){
a[x].z[ss(s[i])]=++tot;
x=tot;
a[x].ch=ss(s[i]);
}
else{
x=a[x].z[ss(s[i])];
}
a[x].js++;
}
}
int find(string s){
int len=s.size(),x=0;
for(int i=0;i<len;i++){
if(a[x].z[ss(s[i])]!=0){
x=a[x].z[ss(s[i])];
}
else{
return 0;
}
}
return a[x].js;
}
int main(){
int t;
scanf("%d",&t);
while(t){
t--;
tot=0;
int n,p;
scanf("%d%d",&n,&p);
for(int i=1;i<=n;i++){
string s;
cin>>s;
insert(s);
}
for(int i=1;i<=p;i++){
string s;
cin>>s;
printf("%d\n",find(s));
}
for(int i=1;i<=n;i++){
a[i].ch=0;
a[i].f=0;
a[i].js=0;
for(int j=1;j<=62;j++){
a[i].z[j]=0;
}
}
}
return 0;
}