#include <fstream>
#include <cstring>
#include <map>
const int MAX_N = 16384;
const int B = 257;
const int P = 1e9 + 7;
int prefH[1 + MAX_N], powerB[1 + MAX_N];
std::map<int, int> mp;
int k;
int rangeHash(int l, int r) {
return (prefH[r] - (long long)prefH[l - 1] * powerB[r - l + 1] % P + P) % P;
}
bool ok(int n, int l) {
mp.clear();
for (int i = 1; i + l - 1 <= n; i++) {
mp[rangeHash(i, i + l - 1)]++;
}
for (auto it : mp) {
if (it.second >= k) {
return true;
}
}
return false;
}
int cb(int n) {
int st = 1, dr = n, sol = 0;
while (st <= dr) {
int mijl = (st + dr) / 2;
if (ok(n, mijl)) {
sol = mijl;
st = mijl + 1;
} else {
dr = mijl - 1;
}
}
return sol;
}
bool isDigit[256] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
class InParser {
private:
FILE *fin;
char *buff;
int sp;
char read_char() {
++sp;
if (sp == 4096) {
sp = 0;
fread(buff, 1, 4096, fin);
}
return buff[sp];
}
public:
InParser(const char* nume) {
fin = fopen(nume, "r");
buff = new char[4096]();
sp = 4095;
}
InParser& operator >> (char S[]) {
char c;
int n = 0;
while (isDigit[c = read_char()]) {
S[n++] = c;
}
return* this;
}
};
int main() {
std::ifstream fin("substr.in");
std::ofstream fout("substr.out");
int n;
char* S = new char[1 + MAX_N];
fin >> n >> k >> S;
for (int i = 1; i <= n; i++) {
prefH[i] = ((long long)prefH[i - 1] * B + S[i - 1] - 'a') % P;
}
powerB[0] = 1;
for (int i = 1; i <= n; i++) {
powerB[i] = (long long)powerB[i - 1] * B % P;
}
int answer = cb(n);
fout << answer;
return 0;
}