using System;
using System.Collections.Generic;
using System.Linq;
//尺取り法or累積和
//000111000101010という入力の時は
//03331111110と保存する

class Program
{
    static void Main()
    {
        string[] In = Console.ReadLine().Split(' ');
        int n = int.Parse(In[0]);
        int k = int.Parse(In[1]);
        string s = Console.ReadLine();
        var Nums = new List<int>();
        int now = 1;//今見ている数(0or1)
        int cnt = 0;//nowがいくつ並んでいるか
        for (int i = 0; i < n; i++)
        {
            if (s[i] == (char)('0' + now)) cnt++;
            else
            {
                Nums.Add(cnt);
                now = 1 - now;//０と1を切り替えるときの計算
                cnt = 1;//新しいもののカウント
            }
        }
        if (cnt != 0) Nums.Add(cnt);
        
        int Add = 2 * k + 1;
        int ans = 0;
        int left = 0;
        int right = 0;
        int tmp = 0;//[left,rigth)のsum
        //尺取り法
        for (int i = 0; i < Nums.Count(); i += 2)
        {
            int Nextleft = i;
            int Nextright = (int)Math.Min(i + Add, Nums.Count());//最大範囲を配列の長さが超えてないか
            //左端を移動する
            while (Nextleft > left)
            {
                tmp -= Nums[left];
                left ++;
            }
            //右端を移動する
            while(Nextright > right)
            {
                tmp += Nums[right];
                right++;
            }
            ans = (int)Math.Max(tmp, ans);
        }
        Console.WriteLine(ans);
    }
}
//TLE
//class Program
//{
//    static void Main()
//    {
//        string[] In = Console.ReadLine().Split(' ');
//        int n = int.Parse(In[0]);
//        int k = int.Parse(In[1]);
//        string s = Console.ReadLine();
//        var Nums = new List<int>();
//        int now = 1;//今見ている数(0or1)
//        int cnt = 0;//nowがいくつ並んでいるか
//        for(int i = 0; i < n; i++)
//        {
//            if (s[i] == (char)('0' + now)) cnt++;
//            else
//            {
//                Nums.Add(cnt);
//                now = 1 - now;//０と1を切り替えるときの計算
//                cnt = 1;//新しいもののカウント
//            }
//        }
//        if (cnt != 0) Nums.Add(cnt);
//        //1-0-1-0-1みたいな配列が欲しい
//        //1-0-1-0みたいに0で終わっていたら適当に1足す
//        int Add = 2 * k + 1;//最大どれくらいの範囲をとれるか
//        int ans = 0;
//        //1-0-1..の1から始めるので、偶数番目から見る
//        for(int i = 0; i < Nums.Count(); i+=2)
//        {
//            int tmp = 0;
//            int left = i;
//            int right = (int)Math.Min(i + Add, Nums.Count());//最大範囲を配列の長さが超えてないか
//            for(int j = left; j < right; j++)
//            {
//                tmp += Nums[j];
//            }
//            ans = (int)Math.Max(tmp, ans);
//        }
//        Console.WriteLine(ans);
//    }
//}
//なんかあわない
//namespace D
//{
//    class Program
//    {
//        static void Main(string[] args)
//        {
//            string[] In = Console.ReadLine().Split(' ');
//            int n = int.Parse(In[0]);
//            int k = int.Parse(In[1]);
//            string s = Console.ReadLine();
//            var L = new List<int>();
//            int cnt = 0;
//            char t = ' ';
//            for(int i=0; i < n; i++)
//            {
//                if (s[i] == t) cnt++;
//                else
//                {
//                    L.Add(cnt);
//                    cnt = 1;
//                    t = s[i];
//                }
//            }
//            L.Add(cnt);
//            var A = L.ToArray();
//            int l = A.Length;
//            var C = new int[l];
//            C[0] = A[0];
//            for(int i = 1; i < l; i++)
//            {
//                C[i] = C[i - 1] + A[i];
//            }
//            int max = 0;
//            for(int i = 2; i < l - k; i++)
//            {
//                max = (int)Math.Max(max, C[i + k] - C[i-2]);
//            }
//            Console.WriteLine(max);
//        }
//    }
//}


Measured memory_bytes: 29368