#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;

const ll N = 1e5+5;


ll n,k,dp[N][55],a[N];
vector<int> adj[55],wth[N];
vector<int>::iterator itr;
ll solve(ll x,ll dis){
	if(x>=n){
		return 1;
	}

	if(dp[x][dis]!=-1)
		return dp[x][dis];

	ll mx=0;
	for(ll i=0;i<wth[x].size();i++){
		if(wth[x][i]==-1)
			continue;
		if(abs(a[x]-i)+dis<=k){
			mx=max(mx,solve(wth[x][i],abs(a[x]-i)+dis)+1);
		}else{
			mx=max(mx,1LL);
		}
	}

	return dp[x][dis]=mx;
}

int main()
{
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin >> n >> k;
    
    for(int i=1;i<=n;i++){
    	cin >> a[i];
    	adj[a[i]].push_back(i);
    }
    for(int i=1;i<=n;i++){
    	for(int j=0;j<55;j++){
    		if((adj[j]).size()==0){
    			wth[i].push_back(-1);
    			continue;
    		}
    		itr=upper_bound(adj[j].begin(),adj[j].end(),i);
    		int idx;
    		if(itr==adj[j].end())
    			idx=-1;
    		else
    			idx=(*itr);
    		// if(idx)
    		wth[i].push_back(idx);
    	}
    }
    if(k==0){
        cout << "1\n";
        return 0;
    }
    memset(dp,-1,sizeof(dp));
    ll ans=solve(1,0);
    if(ans==0)
        ans++;
    cout << ans << endl;
    return 0;
}