#include<bits/stdc++.h>
using namespace std;
#define int long long
int read(){
int n=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch)){
n=n*10+ch-'0';
ch=getchar();
}
return n*f;
}
int n,k;
int a[1000005];
int vct[1000005];
int dp[1000005];
signed main(){
n=read(),k=read();
for(int i=1;i<=n;i++)a[i]=read(),vct[i]=-1;
vct[0]=-1;
vector<pair<int,int>> vc;
for(int i=1;i<=n;i++){
//如果想要成为答案
if(a[i]<=i){
//delete i-1~k prior.
//i-a[i] 个
if(i-a[i]<=min(i-1,k)&&n-a[i]>=k){
//1到p删d个
vct[i]=i-a[i];
vc.push_back({i-a[i],i});
//vct.push_back({i-a[i],i-1});
}
}
}
sort(vc.begin(),vc.end());
for(int i=0;i<(int)vc.size();i++){
pair<int,int> it=vc[i];
int d=it.first,pos=it.second;
dp[pos]=1;
for(int j=0;j<i;j++){
if(vc[j].second<vc[i].second&&pos-d>vc[j].second-vc[j].first){
dp[pos]=max(dp[pos],dp[vc[j].second]+1);
}
}
}/*
for(int i=1;i<=n;i++){
if(vct[i]==-1)continue;
dp[i]=1;
for(int j=1;j<i;j++){
//i-1 个删 vct[i]
//j-1 个删 vct[j]
//j+1~i-1
if(vct[j]!=-1&&vct[j]<=vct[i]&&i-vct[i]>j-vct[j]){
dp[i]=max(dp[i],dp[j]+1);
}
}//cout<<i<<" "<<vct[i]<<" "<<dp[i]<<"\n";
}*/
cout<<*max_element(dp+1,dp+n+1);
return 0;
}