import kotlin.math.max

fun intList() = readLine()?.split(" ")?.map(String::toInt) ?: TODO()
fun main() {
    val (n, k) = intList()
    val s = readLine() ?: return
    val memo = mutableListOf<Int>()
    val k2 = k * 2
    var c = 0
    var i = 0
    var flag = s.first().toString().toInt()
    s.forEach {
        when (it) {
            '0' -> {
                if (flag == 1) {
                    memo.add(c)
                    c = 0
                    i++
                    flag = 0
                }
                c++
            }
            '1' -> {
                if (flag == 0) {
                    memo.add(c)
                    c = 0
                    i++
                    flag = 1
                }
                c++
            }
        }
    }
    memo.add(c)

    val f1 = s.first() == '1'
    var m = 0
    var p = -1
    0.until(memo.size).forEach { index ->
        val k3 = k2 + if (f1) {
            if (index % 2 == 0) {
                1
            } else {
                0
            }
        } else {
            if (index % 2 == 0) {
                0
            } else {
                1
            }
        }
        if (p == -1) {
            p = 0
            repeat(k3) { j ->
                p += memo.getOrElse(j) { 0 }
            }
        } else {
            if (k2 == k3) {
                p -= memo.getOrElse(index - 1) { 0 }
            } else {
                p =
                    p - memo.getOrElse(index - 1) { 0 } + memo.getOrElse(index + k3 - 2) { 0 } + memo.getOrElse(index + k3 - 1) { 0 }
            }
        }
        m = max(m, p)
    }
    println(m.toString())
}
