#include <bits/stdc++.h>
using namespace std;
long long INF = 1e9 + 7;
long long MOD = 998244353;
long long seg[1200005] = {0};
void update(long long s, long long e, long long qs, long long qe, long long idx,
            long long k) {
  if (s == e && s == qs) {
    seg[idx] = k;
    return;
  }
  if (qs > e || qe < s) {
    return;
  }
  long long mid = (s + e) / 2;
  update(s, mid, qs, qe, idx * 2, k);
  update(mid + 1, e, qs, qe, idx * 2 + 1, k);
  seg[idx] = max(seg[idx * 2], seg[idx * 2 + 1]);
}
long long query(long long s, long long e, long long qs, long long qe,
                long long idx) {
  if (qs <= s && e <= qe) {
    return seg[idx];
  }
  if (qs > e || qe < s) {
    return 0;
  }
  long long mid = (s + e) / 2;
  long long a = query(s, mid, qs, qe, idx * 2);
  long long b = query(mid + 1, e, qs, qe, idx * 2 + 1);
  return max(a, b);
}
int main(void) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n, k;
  cin >> n >> k;
  long long arr[n];
  for (long long i = 0; i < n; i++) {
    cin >> arr[i];
  };
  long long dp[n];
  long long ans = 0;
  long long n2 = 300000;
  for (long long i = n - 1; i >= 0; i--) {
    dp[i] = 1 + query(1, n2, max(1LL, arr[i] - k), min(n2, arr[i] + k), 1);
    update(1, n2, arr[i], arr[i], 1, dp[i]);
    ans = max(ans, dp[i]);
  }
  cout << ans << "\n";
  ;
}
