#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const int MAX = 1e5 + 10;
const long long INF = (1LL << 31) - 1;
const double PI = acos(-1);
const int SEGLEN = 1 << 18;
vector<int> segtree(2 * SEGLEN);
void update(int ind, int x) {
  ind += SEGLEN;
  segtree[ind] = x;
  while (1) {
    ind /= 2;
    if (ind == 0) break;
    segtree[ind] = max(segtree[2 * ind], segtree[2 * ind + 1]);
  }
}
int get_max(int l, int r) {
  l += SEGLEN;
  r += SEGLEN;
  int ans = 0;
  while (l < r) {
    if (l % 2 == 1) {
      ans = max(ans, segtree[l]);
      ++l;
    }
    l /= 2;
    if (r % 2 == 1) {
      ans = max(ans, segtree[r - 1]);
      --r;
    }
    r /= 2;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    int a;
    cin >> a;
    int s = max(0, a - k), t = min(SEGLEN, a + k + 1);
    update(a, get_max(s, t) + 1);
  }
  int ans = 1;
  for (int i = 0; i < SEGLEN; i++) ans = max(ans, segtree[i + SEGLEN]);
  cout << ans << endl;
  return 0;
}
