// D - Flat Subsequence
#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
#define rp(i,s,e) for(int i=(int)(s);i<(int)(e);++i)

int op(int a, int b){ return max(a,b); } // 処理
int e(){ return 0; } // 単位元
using MONOID = int;
using SEG_T = segtree<MONOID, op, e>;

int main(){
	int N, K; cin>>N>>K;
	vector<int> A(N); for(auto& a:A) cin>>a;
	SEG_T seg(N);
	int ans = 0;
	rp(i, 0, N){
		int l = max(0, A[i]-K);
		int r = min(A[i]+K+1, N);
		int longest = seg.prod(l, r); // [l,r)
		seg.set(A[i], longest + 1);
		ans = max(ans, longest + 1);
	}
	cout<< ans <<endl;
}
