#include<bits/stdc++.h>
using namespace std;
int n,k;
int f[200010][20],nxt[200010][20],dp[(1<<17)+10];
char s[200010];
bool check(int x){
	memset(nxt,-1,sizeof(nxt));
	for(int i=n-x+1;i>=1;i--){
		for(int j=0;j<=k;j++) nxt[i][j]=nxt[i+1][j];
		for(int j=0;j<k;j++) if(f[i+x-1][j]-f[i-1][j]+f[i+x-1][k]-f[i-1][k]==x) nxt[i][j]=i+x-1;
	}
	memset(dp,63,sizeof(dp));
	dp[0]=0;
	for(int msk=0;msk<(1<<k);msk++) if(dp[msk]<=n)
		for(int i=0;i<k;i++)
			if(!(msk&(1<<i))&&nxt[dp[msk]+1][i]!=-1)
				dp[msk|(1<<i)]=min(dp[msk|(1<<i)],nxt[dp[msk]+1][i]);
	return (dp[(1<<k)-1]<=n);
}
signed main(){
	cin>>n>>k>>s+1;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=k;j++) f[i][j]=f[i-1][j];
		if(s[i]=='?') f[i][k]++;
		else f[i][s[i]-'a']++;
	}
	int l=0,r=n,mid,ans=0;
	while(l<r){
		mid=(l+r+1)/2;
		if(check(mid))
			ans=mid,l=mid;
		else
			r=mid-1;
	}
	cout<<ans<<endl;
	return 0;
}