#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 1;
int tr[3 * N];
int Q(int node, int s, int e, int i, int j) {
  if (i > e || j < s) {
    return 0;
  } else if (i <= s && e <= j) {
    return tr[node];
  }
  int l = node * 2;
  int r = l + 1;
  int m = (s + e) / 2;
  int p = Q(l, s, m, i, j);
  int q = Q(r, m + 1, e, i, j);
  return max(p, q);
}
void up(int node, int s, int e, int i, int v) {
  if (i > e || i < s) {
    return;
  } else if (s == e && i == s) {
    tr[node] = v;
    return;
  }
  int l = node * 2;
  int r = l + 1;
  int m = (s + e) / 2;
  up(l, s, m, i, v);
  up(r, m + 1, e, i, v);
  tr[node] = max(tr[l], tr[r]);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t, i, j, n, m, l, r, ans = -1;
  cin >> n >> m;
  for (i = 0; i < n; i++) {
    cin >> l;
    r = Q(1, 1, N - 1, max(0, l - m), min(N - 1, l + m));
    up(1, 1, N - 1, l, r + 1);
    ans = max(ans, r + 1);
  }
  cout << ans << "\n";
  return 0;
}
