#include <bits/stdc++.h>
using namespace std;
long long int mod = 1000000007;
long long int INF64 = mod * mod + 1;
struct item {
  long long int val;
  long long int op;
};
const long long int NOP = 0;
const long long int NEU = 0;
class segTree {
  long long int sz;
  vector<item> arr;

 public:
  segTree(long long int n) {
    sz = 1;
    while (sz < n) sz *= 2;
    arr.resize(2 * sz, {0, 0});
  }
  item merge(item one, item two) {
    item temp;
    temp.op = NOP;
    temp.val = max(one.val, two.val);
    return temp;
  }
  void updateIndex(long long int i, long long int v, long long int x,
                   long long int lx, long long int rx) {
    if (lx == rx) {
      arr[x] = {v, 0};
      return;
    }
    long long int m = (lx + rx) / 2;
    if (i <= m)
      updateIndex(i, v, 2 * x + 1, lx, m);
    else
      updateIndex(i, v, 2 * x + 2, m + 1, rx);
    arr[x] = merge(arr[2 * x + 1], arr[2 * x + 2]);
  }
  void updateIndex(long long int i, long long int v) {
    updateIndex(i, v, 0, 0, sz - 1);
  }
  long long int queryRange(long long int l, long long int r, long long int x,
                           long long int lx, long long int rx) {
    if (l > rx || lx > r) return NEU;
    if (lx >= l && rx <= r) return arr[x].val;
    long long int m = (lx + rx) / 2;
    return max(queryRange(l, r, 2 * x + 1, lx, m),
               queryRange(l, r, 2 * x + 2, m + 1, rx));
  }
  long long int queryRange(long long int l, long long int r) {
    return queryRange(l, r, 0, 0, sz - 1);
  }
};
void solve() {
  long long int n, k;
  cin >> n >> k;
  segTree st(300001);
  long long int ans = 1;
  while (n--) {
    long long int a;
    cin >> a;
    long long int res = st.queryRange(max(1LL, a - k), min(300000LL, a + k));
    ans = max(ans, res + 1);
    st.updateIndex(a, res + 1);
  }
  cout << ans;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int T;
  T = 1;
  for (long long int i = 1; i <= T; i++) {
    solve();
  }
  cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC
       << "ms\n";
}
