#include <bits/stdc++.h>
using namespace std;
void Set(int a, int i, int l, int r, vector<int>& st) {
  if (a < l || r <= a)
    return;
  else if (l == a && r - l == 1) {
    st[i] = max(a, st[i]);
    return;
  } else {
    Set(a, i * 2 + 1, l, (l + r) / 2, st);
    Set(a, i * 2 + 2, (l + r) / 2, r, st);
    st[i] = max(st[i * 2 + 1], st[i * 2 + 2]);
    return;
  }
}
int Max(int a, int b, int i, int l, int r, vector<int>& st) {
  if (b <= l || r <= a)
    return 0;
  else if (a <= l && r <= b)
    return st[i];
  else
    return max(Max(a, b, 2 * i + 1, l, (l + r) / 2, st),
               Max(a, b, 2 * i + 2, (l + r) / 2, r, st));
}
int main() {
  int N, K;
  cin >> N >> K;
  vector<int> A(N), st(1048575, 0);
  int i;
  for (i = 0; i < N; i++) cin >> A[i];
  for (i = 0; i < N; i++)
    Set(Max(max(0, A[i] - K), min(300000, A[i] + K + 1), 0, 0, 524288, st) + 1,
        0, 0, 524288, st);
  cout << Max(0, 524288, 0, 0, 524288, st) << endl;
}
