#include<iostream>
#include<cstdio>
#include<string>
#include<map>
#define bug puts("----------")
using namespace std;
const int maxn=2e6+5;
int n,m;
string a;
int cnt;
bool vis[maxn];
struct t{
int nex[30],visit;
}tree[maxn];
map<string,int> mp;
void qinsert(string s){
int p=0;
for(int i=0;i<s.size();i++){
int c=s[i]-'a';
if(!tree[p].nex[c])
tree[p].nex[c]=++cnt;
p=tree[p].nex[c];
}
tree[p].visit=1;
return ;
}
int qfind(string s){
if(mp.find(s)!=mp.end())
return mp[s];
int len=s.size(),ans=-1,p=0;
fill(vis,vis+len+1,0);
for(int i=0;i<len;i++){
int c=s[i]-'a';
if(!tree[p].nex[c])
break;
p=tree[p].nex[c];
if(tree[p].visit)
vis[i]=1;
}
for(int i=0;i<len;i++)
if(vis[i]){
ans=i;
p=0;
for(int j=i+1;j<len;j++){
int c=s[j]-'a';
if(!tree[p].nex[c])
break;
p=tree[p].nex[c];
if(tree[p].visit)
vis[j]=1;
}
}
mp[s]=ans+1;
return ans+1;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
cin>>a;
qinsert(a);
}
for(int i=1;i<=m;i++){
cin>>a;
cout<<qfind(a)<<endl;
}
return 0;
}