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.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Main main = new Main();
		main.solve();
	}

	void solve() {
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		int K = Integer.parseInt(sc.next());
		String S = sc.next();
		sc.close();
		int[] a = new int [n];
		for(int i=0;i<n;i++) {
			a[i]=Integer.parseInt(S.substring(i, i+1));
		}
		//0 == -cnt  1 == +cnt
		List<Integer> list = new ArrayList<Integer>();
		//0ならtrue 1ならfalse;
		boolean Evenf = true;
		if(a[0]==1) Evenf = false;
		if(a.length==1) {
			if(!Evenf)list.add(1);
		}

		//a[0]が0ならば0をlistの先頭に追加して調整
		if(Evenf) list.add(0);

		for(int i=1,cnt=1;i<n;i++) {

			if(a[i]==a[i-1]) {
				cnt++;
				if(i==n-1) {
					if(Evenf) {
						list.add(cnt);//list.add(-cnt);
					}else {
						list.add(cnt);
					}
				}
			}else {
				if(Evenf) {
					list.add(cnt);//list.add(-cnt);
					Evenf=false;
				}else {
					list.add(cnt);
					Evenf=true;
				}
				cnt=1;
			}

		}

		//for(int i=0;i<list.size();i++)System.out.println(list.get(i));


		List<Integer> sums = new ArrayList<Integer>();
		Evenf = true;
		if(a[0]==1) Evenf = false;

		for(int loop=0,l=0,r=K*2+1;loop<list.size();loop+=2,l+=2,r+=2) {
			int sum = 0;
			for(int i=l;i<r&&i<list.size();i++) {
				sum += list.get(i);
			}

			sums.add(sum);
		}


		Collections.sort(sums,Collections.reverseOrder());
		//for(int i=0;i<sums.size();i++)System.out.println(sums.get(i));

		System.out.println(sums.get(0));
	}

}