#include<bits/stdc++.h>
using namespace std;
struct trie{
int nex[1000010][26],cnt;
int end[1000010];
void insert(char s[],int l){
int p=0;
for(int i=0;i<l;i++){
int c=s[i]-'a';
if(!nex[p][c])nex[p][c]=++cnt;
p=nex[p][c];
}
end[p]++;
}
int find(char s[],int l){
int p=0,ans=0;
for(int i=0;i<l;i++){
int c=s[i]-'a';
if(end[p])ans=end[p];
if(!nex[p][c])return ans;
p=nex[p][c];
}
if(end[p])ans+=end[p];
return ans;
}
};
int main(){
int n,m;
trie tree;
cin>>n>>m;
for(int i=1;i<=n;i++){
char s[1000010];
cin>>s;
tree.insert(s,strlen(s));
}
for(int i=1;i<=m;i++){
char s[1000010];
cin>>s;
cout<<tree.find(s,strlen(s))<<endl;
}
return 0;
}