#include <bits/stdc++.h>
using namespace std;
const int N=2000010,K=700000,inf=0x3f3f3f3f;
int n,m,a[N],s[N],num[N],lc[N],rc[N],idx,f[N],rt;
void add(int &p,int l,int r,int x,int y){
if(!p)p=++idx;
if(l==r){
num[p]=min(num[p],y);
return ;
}
int mid=(l+r)>>1;
if(x<=mid)add(lc[p],l,mid,x,y);
else add(rc[p],l,r,x,y);
}
int query(int p,int l,int r,int ql,int qr){
if(!p)p=++idx;
if(l==r)return num[p];
int mid=(l+r)>>1,res=inf;
if(ql<=mid)res=min(res,query(lc[p],l,mid,ql,qr));
if(mid<qr)res=min(res,query(rc[p],mid+1,r,ql,qr));
return res;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)num[i]=inf;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]==2)a[i]=-1;
s[i]=s[i-1]+a[i];
}
f[1]=1;
for(int i=2;i<=n;i++){
int k=query(rt,0,2*K,s[i]-m+K,s[i]+m+K);
f[i]=k+1;
add(rt,0,2*K,s[i],f[i]);
}
cout<<f[n];
return 0;
}