import std.algorithm;
import std.array;
import std.conv;
import std.math;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

T read(T)() { return readln.chomp.to!T; }
T[] reads(T)() { return readln.split.to!(T[]); }
alias readint = read!int;
alias readints = reads!int;

int calc(int k, string s) {
    // 0, 1 でグループ化して個数を記録する
    int[] g;
    // 先頭要素が 0 なら、先頭に 0 個の 1 があると見なす
    if (s.front == '0') g ~= 0;

    int lo = 0;
    while (lo < s.length) {
        int hi = lo;
        while (hi < s.length && s[lo] == s[hi]) hi++;
        g ~= hi - lo;
        lo = hi;
    }

    // 累積和
    auto sum = new int[g.length];
    sum[0] = g[0];
    for (int i = 1; i < g.length; i++) {
        sum[i] = g[i] + sum[i - 1];
    }

    int ans = 0;
    // 0, 1, 0, 1, ... のパターンで並んでいるので
    // 2 個単位で k 個まで取り出す(2 * k + 1 個とる)
    for (int i = 0; i < sum.length; i += 2) {
        int hi = min(i + 2 * k, cast(int)sum.length - 1);

        int a = sum[hi] - (i-1 >= 0 ? sum[i-1] : 0);
        ans = max(ans, a);
    }
    return ans;
}

void main() {
    auto nk = readints;
    int k = nk[1];
    string s = read!string;

    writeln(calc(k, s));
}
