#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
char s[N];
int n,k;
int cnt0=0,cnt1=0;
int max1,max2;
int main()
{
cin>>n>>k;
cin>>s;
//左右指针之间维护一个修改次数不超过k的连续序列
int j=0;
for(int i=0;i<n;i++)//0改1
{
if(s[i]=='0')
cnt0++;//统计连续序列中0出现的次数,即需要修改的次数
while(cnt0>k)//当需要修改的次数大于可修改次数时
{
if(s[j]=='0')//用左指针寻找当前维护的序列中第一个0出现的位置
cnt0--;
j++;//移动左指针
}
max1=max(max1,i-j+1);//计算最大子串(连续序列)长度
}
j=0;
for(int i=0;i<n;i++)//1改0
{
if(s[i]=='1')
cnt1++;
while(cnt1>k)
{
if(s[j]=='1')
cnt1--;
j++;
}
max2=max(max2,i-j+1);
}
cout<<max(max1,max2)<<endl;//判断两种修改方法找到的最长子串(连续序列)
return 0;
}