#include<bits/stdc++.h>
using namespace std;
const int N=1e7+10;
int n,m;
struct tire{int ch[27],num,fail;bool flag;}t[N]; int cnt;
void insert(string s,int id){
int now=0,len=s.size();
for(int i=0;i<len;i++){
int v=s[i]-'a';
if(!t[now].ch[v]) t[now].ch[v]=++cnt;
now=t[now].ch[v];
}
t[now].num=id;
return;
}
queue<int>q;
void get_fail(){
for(int i=0;i<26;i++) if(t[0].ch[i]) t[t[0].ch[i]].fail=0,q.push(t[0].ch[i]);
while(!q.empty()){
int u=q.front(); q.pop();
for(int i=0;i<26;i++){
int v=t[u].ch[i];
if(!v) t[u].ch[i]=t[t[u].fail].ch[i];
else t[v].fail=t[t[u].fail].ch[i],q.push(v);
}
}
return;
}
void query(string s){
int len=s.size(),now=0;
for(int i=0;i<len;i++){
now=t[now].ch[s[i]-'a'];
int v=now;
for(;v;v=t[v].fail){
if(t[v].flag) break;
t[v].flag=1;
}
}
return;
}
string s,tt[100010];
int main(){
cin>>n>>m;
cin>>s;
for(int i=1;i<=m;i++){
cin>>tt[i];
insert(tt[i],i);
}
get_fail();
query(s);
for(int kj=1;kj<=m;kj++){
int now=0,len=tt[kj].size(),ans=0;
for(int i=0;i<len;i++){
int v=tt[kj][i]-'a';
now=t[now].ch[v];
if(t[now].flag) ans=i+1;
}
cout<<ans<<endl;
}
return 0;
}