#include <stdio.h>


typedef struct dist {
	int q;
	int poz;
};
dist v[100002];
int i,n,d,k,nr,mx,mx0,z,ic;
int a[200002];
bool ok;

bool verif(int k) {
	int i,j;
	i=0; j=1;
	while (i<=n && j<=z) {
		if (v[j].q>=k) {
			if (i+d+1>=v[j].poz) {
				i=v[j].q+v[j].poz-1;
				j++;
			}
			else break;
	    }
	    else j++;
	}
	if (i+d>=n) return true;
	return false;
}
		
			

int main () {
	freopen("obstacole.in","r",stdin);
	freopen("obstacole.out","w",stdout);
	scanf("%d%d",&n,&d);
	ok=false;
	for (i=1; i<=n; i++) {
		scanf("%d",&a[i]);
		if (a[i]==0) ok=true;
	}
	a[0]=0; a[n+1]=0;
	mx=0; mx0=0;
	for (i=1; i<=n+1; i++) {
		if (a[i]==1 && a[i-1]==0) nr=1;
		else
			if (a[i]==1 && a[i-1]==1) nr++;
		else
			if (a[i]==0) nr=0;
		if (nr>mx) mx=nr;
	}
	a[0]=1; a[n+1]=1;
	z=0;
	for (i=1; i<=n+1; i++) {
		if (a[i]==0 && a[i-1]==1)  {
			nr=1;
			ic=i;
		}
		else
			if (a[i]==0 && a[i-1]==0) nr++;
		else
			if (a[i]==1) {
				if (a[i-1]==0) {
					z++;
					v[z].q=nr;
					v[z].poz=ic;
				}
				nr=0;
			}
		if (nr>mx0) mx0=nr;
	}
	if (mx>d) printf("0\n");
	else 
		if (ok==false) printf("0\n");
	else {
		for (k=mx0; k>=1; k--) {
			if (verif(k)) {
				printf("%d\n",k);
				break;
			}
		}
	}
	return 0;
}
			
		
		
	
	