#include <bits/stdc++.h>
using namespace std;
long long arr[600005], tree[4 * 600005];
void up(long long node, long long l, long long r, long long ind, long long x) {
  if (l == r) {
    tree[node] = x;
    return;
  }
  long long mid = (l + r) / 2;
  if (ind >= l && ind <= mid)
    up(2 * node, l, mid, ind, x);
  else
    up(2 * node + 1, mid + 1, r, ind, x);
  tree[node] = max(tree[2 * node], tree[2 * node + 1]);
}
long long query(long long node, long long l, long long r, long long x,
                long long y) {
  if (l > y || r < x) return INT_MIN;
  if (l >= x && r <= y) return tree[node];
  long long mid = (l + r) / 2;
  return max(query(2 * node, l, mid, x, y),
             query(2 * node + 1, mid + 1, r, x, y));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    long long n, k, i, j, l, r;
    cin >> n >> k;
    long long ans = 1;
    for (i = 0; i < n; i++) {
      cin >> arr[i];
      l = max(1ll, arr[i] - k);
      r = arr[i] + k;
      long long q = query(1, 1, 600005 - 1, l, r);
      up(1, 1, 600005 - 1, arr[i], q + 1);
    }
    cout << tree[1];
  }
}
