#include <bits/stdc++.h>
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
#define ll long long
#define _CRT_SECURE_NO_WARNINGS
#define endl '\n'
#define pb push_back
#define f first
#define s second
#define V vector<int>
#define Vl vector<ll>
#define pll pair<ll,ll>
#define Vp vector<pair<int,int>>
#define all(v) v.begin(),v.end()
#define mid(s,e) (s+(e-s)/2)
#define tcase() ll t,n; cin>>t;n=t; while(t--)
#define eb emplace_back
#define ull unsigned long long
#define minimize INT_MAX
#define maximize INT_MIN
#define dsort(a) sort(a.begin(), a.end(), greater<int>())
#define asort(a) sort(a.begin(), a.end())
#define fr(i,n) for(ll i=0; i<n; i++)
#define fr1(i,n) for(ll i=1; i<=n; i++)
#define vp(n) vector<pair<int,int>>v(n);
#define si set <int>
#define cin(v) for (auto & i : v) cin >> i
void fast(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//cout.setf(ios::fixed);
//cout.precision(20);
#ifndef _offline
// freopen("mex.in", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
}
void HaXn() {
int n,k;
cin >> n >>k;
string str; cin >> str;
map <char, int> mp;
for (int i =0; i<k; i++){
mp[str[i]]++;
}
ll l =0, r=k-1;
auto add = [&](int i){
mp[str[i]]++;
};
auto remove = [&](int i){
mp.erase(str[i]);
};
int ans = mp.size() ;
while(r<n){
remove(l);
l++;
r++;
add(r);
int val = mp.size();
ans = max(ans, val);
}
cout << ans;
}
int32_t main() {
fast();
int t =1;
//cin >> t;
while (t--) {
HaXn();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGxsICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nCiNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKI2RlZmluZSBlbmRsICAgICAgICAgICAgICAgICAgICdcbicKI2RlZmluZSBwYiAgICAgICAgICAgICAgICAgICAgcHVzaF9iYWNrCiNkZWZpbmUgZiAgICAgICAgICAgICAgICAgICAgIGZpcnN0CiNkZWZpbmUgcyAgICAgICAgICAgICAgICAgICAgIHNlY29uZAojZGVmaW5lIFYgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8aW50PgojZGVmaW5lIFZsICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8bGw+CiNkZWZpbmUgcGxsICAgICAgICAgICAgICAgICAgIHBhaXI8bGwsbGw+CiNkZWZpbmUgVnAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxwYWlyPGludCxpbnQ+PgojZGVmaW5lIGFsbCh2KSAgICAgICAgICAgICAgICB2LmJlZ2luKCksdi5lbmQoKQojZGVmaW5lIG1pZChzLGUpICAgICAgICAgICAgICAocysoZS1zKS8yKQojZGVmaW5lIHRjYXNlKCkgICAgICAgICAgICAgICBsbCB0LG47IGNpbj4+dDtuPXQ7IHdoaWxlKHQtLSkKI2RlZmluZSBlYiAgICAgICAgICAgICAgICAgICAgZW1wbGFjZV9iYWNrCiNkZWZpbmUgdWxsICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIG1pbmltaXplICAgICAgICAgICAgICBJTlRfTUFYCiNkZWZpbmUgbWF4aW1pemUgICAgICAgICAgICAgIElOVF9NSU4KI2RlZmluZSBkc29ydChhKSAgICAgICAgICAgICAgc29ydChhLmJlZ2luKCksIGEuZW5kKCksIGdyZWF0ZXI8aW50PigpKQojZGVmaW5lIGFzb3J0KGEpICAgICAgICAgICAgICBzb3J0KGEuYmVnaW4oKSwgYS5lbmQoKSkKI2RlZmluZSBmcihpLG4pICAgICAgICAgICAgICAgZm9yKGxsIGk9MDsgaTxuOyBpKyspCiNkZWZpbmUgZnIxKGksbikgICAgICAgICAgICAgIGZvcihsbCBpPTE7IGk8PW47IGkrKykKI2RlZmluZSB2cChuKSAgICAgICAgICAgICAgICB2ZWN0b3I8cGFpcjxpbnQsaW50Pj52KG4pOwojZGVmaW5lIHNpICAgICAgICAgICAgICAgICAgIHNldCA8aW50PgojZGVmaW5lICBjaW4odikgICAgICAgICAgICAgIGZvciAoYXV0byAmIGkgOiB2KSBjaW4gPj4gaQoKdm9pZCBmYXN0KCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgLy9jb3V0LnNldGYoaW9zOjpmaXhlZCk7CiAgICAvL2NvdXQucHJlY2lzaW9uKDIwKTsKI2lmbmRlZiBfb2ZmbGluZQogICAgLy8gZnJlb3BlbigibWV4LmluIiwgInIiLCBzdGRpbik7CiAgICAvL2ZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9CgoKdm9pZCBIYVhuKCkgewogICBpbnQgbixrOwogICBjaW4gPj4gbiA+Pms7CiAgIHN0cmluZyBzdHI7IGNpbiA+PiBzdHI7CiAgIG1hcCA8Y2hhciwgaW50PiBtcDsKICAgZm9yIChpbnQgaSA9MDsgaTxrOyBpKyspewogICAgICAgbXBbc3RyW2ldXSsrOwogICB9CiAgIGxsIGwgPTAsIHI9ay0xOwogICBhdXRvIGFkZCA9IFsmXShpbnQgaSl7CiAgICAgICBtcFtzdHJbaV1dKys7CiAgIH07CiAgIGF1dG8gcmVtb3ZlID0gWyZdKGludCBpKXsKICAgICBtcC5lcmFzZShzdHJbaV0pOwogICB9OwogICBpbnQgYW5zID0gbXAuc2l6ZSgpIDsKICAgd2hpbGUocjxuKXsKICAgIHJlbW92ZShsKTsKICAgIGwrKzsKICAgIHIrKzsKICAgIGFkZChyKTsKICAgIGludCB2YWwgPSBtcC5zaXplKCk7CiAgICBhbnMgPSBtYXgoYW5zLCB2YWwpOwogICB9CiAgIGNvdXQgPDwgYW5zOwp9CgoKaW50MzJfdCBtYWluKCkgewogICAgZmFzdCgpOwogICAgaW50IHQgPTE7CiAgICAvL2NpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIEhhWG4oKTsKICAgIH0KfQ==