#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <atcoder/all>
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define repR(i, n) for(int i = (n) - 1; i > -1; i--)
#define rep1(i, n) for(int i = 1; i < (int)(n + 1); i++)
#define rep1R(i, n) for(int i = (n); i > 0; i--)
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
using namespace atcoder;

const int MAX = 300000;

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

int e() {
  return 0;
}

int main() {
  int N, K;
  cin >> N >> K;
  vector<int> A(N);
  rep(i, N) cin >> A[i];
  segtree<int, op, e> sg(MAX);
  rep(i, N) {
    sg.set(A[i], sg.prod(max(0, A[i]-K), min(N, A[i]+K+1)) + 1);
  }
  cout << sg.all_prod() << endl;
  return 0;
}
