rt
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
const int MAXN = 1e6+10;
struct trie{
int end[N];
int to[MAXN][26],idx;
void init(){
memset(end,0,sizeof end);
for(int i=0;i<MAXN;i++)
for(int j=0;j<26;j++)
to[i][j]=-1;
}
void add(string s){
int u = 0;
for(int i=0;i<s.size();i++){
if(to[u][s[i]-'a'] == -1)
to[u][s[i]-'a']=++idx;
if(i==s.size()-1)end[u]++;
u = to[u][s[i]-'a'];
}
}
int find(string s){
int u = 0, ans = 0;
for(int i=0;i<s.size();i++){
ans += end[u];
if(to[u][s[i]-'a'] == -1)return ans;
u = to[u][s[i]-'a'];
}
return ans;
}
void debug(){
for(int i=0;i<=idx;i++){
printf("idx %d:[%d]",i,end[i]);
for(int u=0;u<26;u++)
printf("(%d,%c)",to[i][u],u+'a');
cout<<endl;
}
}
}tr;
int main(){
int n,m;
cin>>n>>m;
tr.init();
while(n--){
string s;cin>>s;
tr.add(s);
}
while(m--){
string s;
cin>>s;
cout<<tr.find(s)<<endl;
}
return 0;
}