#include <bits/stdc++.h>
 
using namespace std;
using ll=long long;
using pii=pair<int,int>;

int np[17][200000];
int pre[(1<<17)+1];

int main() {
	int n,k;
	cin >> n >> k;
    string s;
    cin >> s;
	int l=0,r=n/k;
    while (l<r) {
        int m=(l+r+1)/2;
        for (int j=0;j<k;j++) {
            int cnt=0, nextpos=n+1;
            for (int i=n-1;i>=0;i--) {
                if (s[i]=='?' || s[i]=='a'+j) cnt++;
                else cnt=0;
                if (cnt>=m) nextpos=i;
                np[j][i]=nextpos;
            }
        }
        /*cerr << m << endl;
        for (int j=0;j<k;j++) {
            cerr << (char)('a'+j) << ": ";
            for (int i=0;i<n;i++) cerr << np[j][i] << ' ';
            cerr << endl;
        }*/
        pre[0]=0;
        for (int i=1;i<(1<<k);i++) {
            pre[i]=n+1;
            /*for (int j=0;j<k;j++) if (i&(1<<j)) {
                cerr << (char)('a'+j) << ',';
            }
            cerr << '\t' << i << endl;*/
            for (int j=0;j<k;j++) if (i&(1<<j)) {
                int x=(i&(~(1<<j)));
                //cerr << (char)('a'+j) << ' '<< x << ' ' << pre[x] << ' ' << np[j][pre[x]] << endl;
                if (pre[x]<n) pre[i]=min(pre[i],np[j][pre[x]]+m);
                //cerr << (char)('a'+j) << ' ' << pre[i] << endl;
            }
        }
        /*for (int i=0;i<(1<<k);i++) {
            for (int j=0;j<k;j++) if (i&(1<<j)) {
                cerr << (char)('a'+j) << ',';
            }
            cerr << '\t' << pre[i] << endl;
        }*/
        if (pre[(1<<k)-1]<=n) l=m;
        else r=m-1;
    }
    printf("%d\n",l);
    return 0;
}