N, K = list(map(int, input().split()))

s = eval(input())

s = list(map(int, s))



v = []

now = 1  # 現在見ている数

cnt = 0  # nowが並ぶ数

for ss in s:

    if ss == now:

        cnt += 1

    else:

        v.append(cnt)

        now = 1 - now  # 0と1を切り替える計算 now ^= 1

        cnt = 1  # ss分を計上

if cnt > 0:

    v.append(cnt)

# 1-0-1-0-1-0-1のように

# 1で終わる配列が欲しい

# 1-0-1-0のように0で終わっていたら、1を足す



# ※1の人数-0の人数-...の配列



if len(v) % 2 == 0: v.append(0)

# 1が0個という項を追加して、

# 1-0-1-0-1にする





# 1-0-1-...の1から始めるので、偶数番目だけ見る

lv = len(v)

left, right = 0, 0

# [left, right)

ans = 0

cur_total = 0

for i in range(0, lv, 2):

    nextLeft = i

    nextRight = min(2 * K + 1 + i, lv)

    while left < nextLeft:

        cur_total -= v[left]

        left += 1

    while right < nextRight:

        cur_total += v[right]

        right += 1

    ans = max(cur_total, ans)



print(ans)

from itertools import accumulate



N, K = list(map(int, input().split()))

s = eval(input())

s = list(map(int, s))



v = []

now = 1  # 現在見ている数

cnt = 0  # nowが並ぶ数

for ss in s:

    if ss == now:

        cnt += 1

    else:

        v.append(cnt)

        now = 1 - now  # 0と1を切り替える計算 now ^= 1

        cnt = 1  # ss分を計上

if cnt > 0:

    v.append(cnt)

# 1-0-1-0-1-0-1のように

# 1で終わる配列が欲しい

# 1-0-1-0のように0で終わっていたら、1を足す



# ※1の人数-0の人数-...の配列



if len(v) % 2 == 0: v.append(0)

# 1が0個という項を追加して、

# 1-0-1-0-1にする



c_sum = [0] + list(accumulate(v))

# accumulate:=[1項目, 1,2項目の和, ...]



# 1-0-1-...の1から始めるので、偶数番目だけ見る

lv = len(v)

# [left, right)

ans = 0

for i in range(0, lv, 2):

    left = i

    right = min(2 * K + 1 + i, lv)

    ans = max(c_sum[right] - c_sum[left], ans)



print(ans)



# 累積和



# forループの外側にleft, rightを持つ

# 次のleft, rightを計算する

# 左端を移動する

# 右端を移動する

N, K = list(map(int, input().split()))
s = eval(input())
s = list(map(int, s))
v = []
now = 1  # 現在見ている数
cnt = 0  # nowが並ぶ数
for ss in s:
    if ss == now:
        cnt += 1
    else:
        v.append(cnt)
        now = 1 - now  # 0と1を切り替える計算 now ^= 1
        cnt = 1  # ss分を計上
if cnt > 0:
    v.append(cnt)
# 1-0-1-0-1-0-1のように
# 1で終わる配列が欲しい
# 1-0-1-0のように0で終わっていたら、1を足す
# ※1の人数-0の人数-...の配列
if len(v) % 2 == 0:
    v.append(0)
# 1が0個という項を追加して、
# 1-0-1-0-1にする
# 1-0-1-...の1から始めるので、偶数番目だけ見る
lv = len(v)
left, right = 0, 0
# [left, right)
ans = 0
cur_total = 0
for i in range(0, lv, 2):
    nextLeft = i
    nextRight = min(2 * K + 1 + i, lv)
    while left < nextLeft:
        cur_total -= v[left]
        left += 1
    while right < nextRight:
        cur_total += v[right]
        right += 1
    ans = max(cur_total, ans)
print(ans)

from itertools import accumulate

N, K = list(map(int, input().split()))
s = eval(input())
s = list(map(int, s))
v = []
now = 1  # 現在見ている数
cnt = 0  # nowが並ぶ数
for ss in s:
    if ss == now:
        cnt += 1
    else:
        v.append(cnt)
        now = 1 - now  # 0と1を切り替える計算 now ^= 1
        cnt = 1  # ss分を計上
if cnt > 0:
    v.append(cnt)
# 1-0-1-0-1-0-1のように
# 1で終わる配列が欲しい
# 1-0-1-0のように0で終わっていたら、1を足す
# ※1の人数-0の人数-...の配列
if len(v) % 2 == 0:
    v.append(0)
# 1が0個という項を追加して、
# 1-0-1-0-1にする
c_sum = [0] + list(accumulate(v))
# accumulate:=[1項目, 1,2項目の和, ...]
# 1-0-1-...の1から始めるので、偶数番目だけ見る
lv = len(v)
# [left, right)
ans = 0
for i in range(0, lv, 2):
    left = i
    right = min(2 * K + 1 + i, lv)
    ans = max(c_sum[right] - c_sum[left], ans)
print(ans)
# 累積和
# forループの外側にleft, rightを持つ
# 次のleft, rightを計算する
# 左端を移動する
# 右端を移動する

+from itertools import accumulate + +c_sum = [0] + list(accumulate(v)) +# accumulate:=[1項目, 1,2項目の和, ...] -left, right = 0, 0 -cur_total = 0 -    nextLeft = i -    nextRight = min(2 * K + 1 + i, lv) -    while left < nextLeft: -        cur_total -= v[left] -        left += 1 -    while right < nextRight: -        cur_total += v[right] -        right += 1 -    ans = max(cur_total, ans) +    left = i +    right = min(2 * K + 1 + i, lv) +    ans = max(c_sum[right] - c_sum[left], ans) +# 累積和 +# forループの外側にleft, rightを持つ +# 次のleft, rightを計算する +# 左端を移動する +# 右端を移動する