#include <bits/stdc++.h>
using namespace std;

#ifdef DEBUG
#include "debug.hpp"
#define debug(x...) cerr << "[" << #x << "] = [", _print(x)
#else
#define debug(x...)
#endif

const int MAX = 2e5 + 5;
int n, k, f[1 << 17];
char s[MAX];

bool check(int len) {
    vector<vector<int>> next(26, vector<int>(n + 2));
    for (int t = 0; t < k; t++) {
        next[t][n + 1] = n + 1;
        int cnt = 0;
        for (int i = n; i >= 0; i--) {
            next[t][i] = next[t][i + 1];
            if (cnt >= len)
                next[t][i] = i + len;
            if (i == 0)
                break;
            if (s[i] - 'a' == t || s[i] == '?')
                cnt++;
            else
                cnt = 0;
        }
    }
    for (int mask = 1; mask < (1 << k); mask++) {
        f[mask] = n + 1;
        for (int i = 0; i < k; i++)
            if ((mask >> i) & 1)
                f[mask] = min(f[mask], next[i][f[mask ^ (1 << i)]]);
    }
    return f[(1 << k) - 1] <= n;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
#ifdef DEBUG
    freopen("input", "r", stdin);
#endif
    cin >> n >> k >> (s + 1);
    int l = 1, r = n / k, rs = 0;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (check(mid)) {
            rs = mid;
            l = mid + 1;
        } else
            r = mid - 1;
    }
    cout << rs;
}