RT
#include<bits/stdc++.h>
using namespace std;
const int A=5e4+131,B=1e4+131,MA=5e5+1311;
char str[30];
int len,cnt,tir[MA][26],ed[MA],pas[MA];
inline bool isld(char ch) {
return (ch>='A'&&ch<='Z')||(ch<='z'&&ch>='a')||isdigit(ch);
}
inline int map_char(char a) {
return a-'a';
}
int mc(char a) {
return map_char(a);
}
int dfs(bool uj=0,int nod=0,int i=0) {
int ans=0,tmp=mc(str[i]);
if(i==len)ans+=ed[nod];
if(tir[nod][tmp])ans+=dfs(uj,tir[nod][tmp],i+1);
if(!uj) {
ans+=dfs(1,nod,i+1);//del01
for(int j=0; j<=25; j++)if(tir[nod][j]&&j!=tmp) {
ans+=dfs(1,tir[nod][j],i);//del02
if(str[i]!=str[i+1])
ans+=dfs(1,tir[nod][j],i+1);
}
}
return ans;
}
void insert() {
int now=0,tmp;
for(int i=0; i<len; i++) {
tmp=mc(str[i]);
if(!tir[now][tmp])tir[now][tmp]=++cnt;
now=tir[now][tmp];
pas[now]++;
}
ed[now]++;
}
int find() {
int now=0,tmp;
for(int i=0; i<len; i++) {
tmp=mc(str[i]);
if(!tir[now][tmp])return dfs();
now=tir[now][tmp];
}
if(ed[now])return -1;
return dfs();
}
int in() {
char ch=getchar();
int cnt=0;
for(; !isld(ch); ch=getchar());
for(; isld(ch); ch=getchar())str[cnt++]=ch;
str[cnt]=0;
return cnt;
}
int main() {
int n,m;
cin>>n>>m;
for(int i=0; i<n; i++) {
len=in();
insert();
}
for(int i=0; i<m; i++) {
len=in();
cout<<find()<<"\n";
}
return 0;
}
/*
4 1
abcd
abcde
aabc
abced
abcdd
*/