rt.
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define re register
//#define int long long
il int read(){
int s=0,w=1;char c=getchar();
while(!isdigit(c)){ if(c=='-') w=-1;c=getchar();}
while(isdigit(c)){ s=(s<<3)+(s<<1)+(c^48);c=getchar();}
return s*w;
}
const int N=1e5+5;
int n,m,cnt[N*30];
char s[N],t[N];
int tot,ch[N*30][65];
il void ins(re char str[]){
int now=0,len=strlen(str+1);
for(re int i=1;i<=len;++i){
int tmp;
if(str[i]>='a' && str[i]<='z') tmp=str[i]-'a';
else if(isdigit(str[i])) tmp=str[i]-'0'+52;
else tmp=str[i]-'A'+26;
if(!ch[now][tmp]) ch[now][tmp]=++tot;
now=ch[now][tmp];
++cnt[now];
}
}
il int query(re char str[]){
int now=0,len=strlen(str+1);
for(re int i=1;i<=len;++i){
int tmp;
if(str[i]>='a' && str[i]<='z') tmp=str[i]-'a';
else if(isdigit(str[i])) tmp=str[i]-'0'+52;
else tmp=str[i]-'A'+26;
if(!ch[now][tmp]) return 0;
now=ch[now][tmp];
}
return cnt[now];
}
il void solve(){
n=read(),m=read();
tot=0;
for(re int i=1;i<=n*30;++i){
cnt[i]=0;
for(re int j=0;j<65;++j){
ch[i][j]=0;
}
}
while(n--){
scanf("%s",s+1);
ins(s);
}
while(m--){
scanf("%s",t+1);
printf("%d\n",query(t));
}
}
signed main(){
int T=read();
while(T--) solve();
return 0;
}