#include<bits/stdc++.h>#define io std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);usingnamespace std;constint maxn =(int)1e3+15;int a[maxn];struct node
{int l;int r;}pos[maxn];//#define LOCALintmain(void){#ifdef LOCAL freopen("in.txt","r",stdin);#endif
io
int n,R;while(cin>>n>>R){int addl =1- R;int addr = R -1;int flag =0;int flag2 =0;int k =0;for(int i =1; i<=n;i++){
cin>>a[i];if(a[i]){if(flag2)continue;
pos[k].l = i + addl;
pos[k].r = i + addr;
k++;if(flag)continue;
flag =1;if( i - R +1>1) flag2 =1;//最左边的覆盖不到1 }}if(!flag){puts("-1");continue;}if( flag2 || pos[k-1].r<n)//最后一个覆盖不到n {puts("-1");continue;}int left =1, right = pos[0].r;int num =1;
flag =1;for(int i =1; i< k ;i++){if(pos[i].l > right+1){ flag =0;break;}if(pos[i].l <= left){
right = pos[i].r;//扩充右边 if(right >= n)break;//最右边能被覆盖 }else{
left = pos[i-1].r +1;//上次能满足的最佳右边作为新的左界
right = pos[i].r;
num++;//只要在不得不扩充左边时才会增加数量 }}
cout<<(flag ? num:-1)<<endl;}}