#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <cstdlib>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <functional> 
#include <iomanip>
#include <unordered_map>
#include <memory.h>
#include <cstring>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <cassert>
#include <atcoder/segtree>
#include <cstdio>

using namespace std;
using namespace atcoder;

int op(int a, int b) { return max(a, b); }

int e() { return 0; }

int target;

bool f(int v) { return v < target; }

int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);

	int n, k;
	cin >> n >> k;
	vector<int> a(n);
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}

	segtree<int, op, e> seg(300010);
		
	int res = 0;
	for (int i = 0; i < n; i++)
	{
		int l = max(1, a[i] - k);
		int r = min(300000, a[i] + k);
		int Max = seg.prod(l, r+1);
		//cout << Max << '\n';
		//cout << i << ' ' << l << ' ' << r<< ' ' <<  Max + 1 << '\n';
		res = max(Max + 1, res);
		seg.set(a[i], Max + 1);
	}
	
	cout << res << '\n';
	
	return 0;
}

