#include<bits/stdc++.h>
#define ll long long
#define ii pair<ll,ll>
#define x first
#define y second
#define pii pair<long,ii>
using namespace std;
const ll o=200005;
long n,m,mn[o][17],f[o],xh[20];
char s[o];
bool ok(long dd)
{
    for(long i=0;i<m;i++)
    {
        mn[n+1][i]=mn[n+2][i]=n+1;
        xh[i]=0;
    }

    long k=n+1,h=0;
    for(long i=n;i>=0;i--)
    {
        for(long j=0;j<m;j++)
            mn[i][j]=mn[i+1][j];

        if(0<=s[i]-'a' && s[i]-'a'<m)
        {
            xh[s[i]-'a']++;
            if(xh[s[i]-'a']==1)h++;
        }

        if(k-i==dd)
        {
            if(0<=s[k]-'a' && s[k]-'a'<m)
            {
                xh[s[k]-'a']--;
                if(xh[s[k]-'a']==0)h--;
            }
            k--;
        }

        if(i==0 || k==n+1)continue;

        if(h==1)
        for(long j=0;j<m;j++)
        if(xh[j]>=1)
        {
            mn[i][j]=i+dd-1;
            break;
        }

        if(h==0)
        for(long j=0;j<m;j++)
            mn[i][j]=i+dd-1;
    }

    /*for(long i=0;i<=n;i++)
    {
        for(long j=0;j<m;j++)
            cout<<mn[i][j]<<' ';
        cout<<'\n';
    }*/

    for(long i=1;i<(1<<m);i++)
    {
        f[i]=n+1;
        for(long j=0;j<m;j++)
            if((i>>j)&1)f[i]=min(f[i],mn[f[i^(1<<j)]+1][j]);
    }
    //cout<<f[3]<<'\n';
    return(f[(1<<m)-1]<=n);
}
int main()
{
    //freopen("a.inp","r",stdin);
    //freopen("a.out","w",stdout);
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(long i=1;i<=n;i++)
        cin>>s[i];
    s[n+1]='?';
    long l=0,r=n;
    while(l<r)
    {
        long mid=(l+r+1)>>1;
        if(ok(mid))l=mid;
        else r=mid-1;
    }
    cout<<l;
    //cout<<ok(1)<<'\n';
    return 0;
}
