rt
#include<bits/stdc++.h>
using namespace std;
inline int max(int &a,int &b){
return a>b?a:b;
}
struct data{
int nxt[27];
bool end;
}a[205];
int ans,n,m,cnt,len;
char q[2000010];
bool vis[2000010];
inline void read_q(){
char c=getchar();
len=0;
while(c<'a'||c>'z') c=getchar();
while('a'<=c&&c<='z') q[len++]=c,c=getchar();
}
inline void insert(){
read_q();
int u=0;
for(int i=0;i<len;i++){
int p=q[i]-'a';
if(!a[u].nxt[p]) a[u].nxt[p]=++cnt;
u=a[u].nxt[p];
}
a[u].end=1;
}
inline void match(int x){
if(vis[x]) return;
vis[x]=1;
ans=max(ans,x);
int u=0;
for(int i=x;i<len;i++){
int p=q[i]-'a';
if(!a[u].nxt[p]) return;
u=a[u].nxt[p];
if(a[u].end) match(i+1);
}
}
inline void query(){
read_q();
memset(vis,0,sizeof vis);
ans=0;
match(0);
printf("%d\n",ans);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) insert();
for(int i=1;i<=m;i++) query();
return 0;
}