#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 9;
int n, k, x;
int seg[4 * N];
int get(int p, int l, int r, int a, int b) {
  if (l >= a && r <= b) return seg[p];
  if (r < a || l > b) return 0;
  int mid = (l + r) / 2;
  if (b <= mid) return get(p * 2, l, mid, a, b);
  if (a > mid) return get(p * 2 + 1, mid + 1, r, a, b);
  return max(get(p * 2, l, mid, a, b), get(p * 2 + 1, mid + 1, r, a, b));
}
void update(int p, int l, int r, int idx, int v) {
  if (l == r) {
    seg[p] = v;
    return;
  }
  int mid = (l + r) / 2;
  if (idx <= mid)
    update(p * 2, l, mid, idx, v);
  else
    update(p * 2 + 1, mid + 1, r, idx, v);
  seg[p] = max(seg[p * 2], seg[p * 2 + 1]);
}
int main() {
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> x;
    x++;
    int l = max(1, x - k);
    int r = min(N, x + k + 1);
    int cur = get(1, 1, n, x, x);
    int go = get(1, 1, n, l, r);
    if (cur <= go) {
      update(1, 1, n, x, go + 1);
    }
  }
  cout << get(1, 1, n, 1, N) << '\n';
}
