#include <bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define Bit(mask , i) ((mask >> i) & 1)
#define fi first
#define se second
#define _LOG2(nl) 31 - __builtin_clz(nl)
#define c_bit(nl) __builtin_popcount(nl)
#define db long double
#define onBit(mask , i) (mask | (1 << i))
#define offBit(mask , i) (mask & (~(1 << i)))
const long long INF = 1e16;
const int N = 2e5 + 7;
string t , s;
int n , q , _lext[N] , lext[N][27];
void inp(){
cin >> n >> q;
cin >> s;
s = "a" + s;
}
void ktao(){
for (int i = n ; i >= 0 ; --i){
for (int j = 0 ; j < 26 ; ++j){
if (_lext[j] == 0) continue;
lext[i][j] = _lext[j];
// cout << i << " " << char(j + 'a') << " " << lext[i][j] << '\n';
}
_lext[s[i] - 'a'] = i;
}
}
bool check(int k){
int i = lext[0][t[0] - 'a'];
if (i == 0) return 0;
int cnt = 1;
while (i <= n){
if (cnt == t.size()) break;
if (i + k > n) return 0;
i = lext[i + k - 1][t[cnt] - 'a'];
if (i == 0) return 0;
++cnt;
}
return 1;
}
void solve(){
ktao();
while (q--){
cin >> t;
int l = 1 , r = n , mid , res = -1;
while (l <= r){
mid = (l + r) >> 1;
if (check(mid)){
res = mid;
l = mid + 1;
}
else r = mid - 1;
}
cout << res << '\n';
}
}
int main(){
// freopen("xhmax.inp" , "r" , stdin);
// freopen("xhmax.out" , "w" , stdout);
faster;
inp();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmFzdGVyIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpCiNkZWZpbmUgQml0KG1hc2sgLCBpKSAoKG1hc2sgPj4gaSkgJiAxKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgX0xPRzIobmwpIDMxIC0gX19idWlsdGluX2NseihubCkKI2RlZmluZSBjX2JpdChubCkgX19idWlsdGluX3BvcGNvdW50KG5sKQojZGVmaW5lIGRiIGxvbmcgZG91YmxlCiNkZWZpbmUgb25CaXQobWFzayAsIGkpIChtYXNrIHwgKDEgPDwgaSkpCiNkZWZpbmUgb2ZmQml0KG1hc2sgLCBpKSAobWFzayAmICh+KDEgPDwgaSkpKQoKY29uc3QgbG9uZyBsb25nIElORiA9IDFlMTY7CmNvbnN0IGludCBOID0gMmU1ICsgNzsKc3RyaW5nIHQgLCBzOwppbnQgbiAsIHEgLCBfbGV4dFtOXSAsIGxleHRbTl1bMjddOwoKdm9pZCBpbnAoKXsKCWNpbiA+PiBuID4+IHE7CgljaW4gPj4gczsKCXMgPSAiYSIgKyBzOwp9Cgp2b2lkIGt0YW8oKXsKCWZvciAoaW50IGkgPSBuIDsgaSA+PSAwIDsgLS1pKXsKCQlmb3IgKGludCBqID0gMCA7IGogPCAyNiA7ICsrail7CgkJCWlmIChfbGV4dFtqXSA9PSAwKSBjb250aW51ZTsKCQkJbGV4dFtpXVtqXSA9IF9sZXh0W2pdOwovLwkJCWNvdXQgPDwgaSA8PCAiICIgPDwgY2hhcihqICsgJ2EnKSA8PCAiICIgPDwgbGV4dFtpXVtqXSA8PCAnXG4nOwoJCX0KCQlfbGV4dFtzW2ldIC0gJ2EnXSA9IGk7CgkJCgl9Cn0KCmJvb2wgY2hlY2soaW50IGspewoJaW50IGkgPSBsZXh0WzBdW3RbMF0gLSAnYSddOwoJaWYgKGkgPT0gMCkgcmV0dXJuIDA7CglpbnQgY250ID0gMTsKCXdoaWxlIChpIDw9IG4pewoJCWlmIChjbnQgPT0gdC5zaXplKCkpIGJyZWFrOwoJCWlmIChpICsgayA+IG4pIHJldHVybiAwOwoJCWkgPSBsZXh0W2kgKyBrIC0gMV1bdFtjbnRdIC0gJ2EnXTsKCQlpZiAoaSA9PSAwKSByZXR1cm4gMDsKCQkrK2NudDsKCX0KCXJldHVybiAxOwp9Cgp2b2lkIHNvbHZlKCl7CglrdGFvKCk7Cgl3aGlsZSAocS0tKXsKCQljaW4gPj4gdDsKCQlpbnQgbCA9IDEgLCByID0gbiAsIG1pZCAsIHJlcyA9IC0xOwoJCXdoaWxlIChsIDw9IHIpewoJCQltaWQgPSAobCArIHIpID4+IDE7CgkJCWlmIChjaGVjayhtaWQpKXsKCQkJCXJlcyA9IG1pZDsKCQkJCWwgPSBtaWQgKyAxOwoJCQl9CgkJCWVsc2UgciA9IG1pZCAtIDE7CgkJfQoJCWNvdXQgPDwgcmVzIDw8ICdcbic7Cgl9Cn0KCmludCBtYWluKCl7Ci8vCWZyZW9wZW4oInhobWF4LmlucCIgLCAiciIgLCBzdGRpbik7Ci8vCWZyZW9wZW4oInhobWF4Lm91dCIgLCAidyIgLCBzdGRvdXQpOwogICAgZmFzdGVyOwogICAgaW5wKCk7CiAgICBzb2x2ZSgpOwkKICAgIHJldHVybiAwOwp9