#include <bits/stdc++.h>
using lint = long long int;
using namespace std;
class segtree {
 public:
  vector<int> tree;
  int n;
  segtree(int n) : tree(4 * n + 1, 0), n(n) {}
  int query(int l, int r, int tl, int tr, int t) {
    if (l > r) return 0;
    if (l == tl && r == tr) return tree[t];
    int mid = (tl + tr) / 2;
    int left = query(l, min(mid, r), tl, mid, 2 * t + 1);
    int right = query(max(mid + 1, l), r, mid + 1, tr, 2 * t + 2);
    return max(left, right);
  }
  int query(int l, int r) { return query(l, r, 0, n - 1, 0); }
  void set(int i, int v, int tl, int tr, int t) {
    if (i < tl || i > tr) return;
    if (tl == tr) {
      tree[t] = max(tree[t], v);
      return;
    }
    int mid = (tl + tr) / 2;
    set(i, v, tl, mid, 2 * t + 1);
    set(i, v, mid + 1, tr, 2 * t + 2);
    tree[t] = max(tree[2 * t + 1], tree[2 * t + 2]);
  }
  void set(int i, int v) { set(i, v, 0, n - 1, 0); }
};
int main() {
  std::ios_base::sync_with_stdio(0);
  int n, k;
  std::cin >> n >> k;
  segtree dp(30001);
  for (int i = 0; i < n; i++) {
    int num;
    std::cin >> num;
    int l = max(num - k, 0);
    int r = min(num + k, 30000);
    int q = dp.query(l, r);
    dp.set(num, q + 1);
  }
  std::cout << dp.query(0, 30000) << std::endl;
}
