N people are arranged in a row from left to right.

You are given a string S of length N consisting of `0` and `1`, and a positive integer K.

The i-th person from the left is standing on feet if the i-th character of S is `0`, and standing on hands if that character is `1`.

You will give the following direction at most K times (possibly zero):

Direction: Choose integers l and r satisfying 1 \leq l \leq r \leq N, and flip the l-th, (l+1)-th, ..., and r-th persons. That is, for each i = l, l+1, ..., r, the i-th person from the left now stands on hands if he/she was standing on feet, and stands on feet if he/she was standing on hands.

Find the maximum possible number of consecutive people standing on hands after at most K directions.

Constraints

* N is an integer satisfying 1 \leq N \leq 10^5.
* K is an integer satisfying 1 \leq K \leq 10^5.
* The length of the string S is N.
* Each character of the string S is `0` or `1`.

Input

Input is given from Standard Input in the following format:


N K
S


Output

Print the maximum possible number of consecutive people standing on hands after at most K directions.

Examples

Input

5 1
00010


Output

4


Input

14 2
11101010110011


Output

8


Input

1 1
1


Output

1
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
*/public class Main {
	public static void main(String[] args) {
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		Scanner in = new Scanner(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		TaskD solver = new TaskD();
		solver.solve(1, in, out);
		out.close();
	}
static class TaskD   {
public void solve(int testNumber, Scanner in, PrintWriter out) {
        int N = in.nextInt();
        int K = in.nextInt();
        String S = in.next();

        String st = "1";
        String fin = "1_";
        StringBuilder buf = new StringBuilder();
        buf.append(st);
        buf.append(S);
        buf.append(fin);
        S = buf.toString();

        int s1[] = new int[N];
        int f1[] = new int[N];
        int fi = 0;
        int si = 1;
        int cou = 0;

        loop:while(true){
            while(S.charAt(cou) == "1".charAt(0)){
                cou++;
                if(S.charAt(cou) == "_".charAt(0)){
                    f1[fi] = cou-1;
                    break loop;
                }
            }
            f1[fi] = cou-1;
            fi++;
            while(S.charAt(cou) == "0".charAt(0)){
                cou++;
            }
            s1[si] = cou-1;
            si++;
        }
        f1[fi]--;

        if(K >= si-1){
            out.println(S.length()-3);
        } else {
            int max = 0;
            for(int i=0; i<=si-1 - K + 1; i++){
                max = Math.max(max, f1[K+i]-s1[i]);
            }
            out.println(max);
        }

    }

}
}

