#include <bits/stdc++.h>
using namespace std;
long long int n, tt, arr[300009], t[4 * 300009];
long long int query(long long int node, long long int l, long long int r,
                    long long int le, long long int ri) {
  if (le > ri || l > ri || r < le) return 0;
  if (le <= l && r <= ri) return t[node];
  long long int mid = (l + r) / 2;
  return max(query(2 * node, l, mid, le, ri),
             query(2 * node + 1, mid + 1, r, le, ri));
}
void update(long long int node, long long int l, long long int r,
            long long int ind, long long int val) {
  if (ind > r || ind < l) return;
  if (l == r) {
    t[node] += val;
    return;
  }
  long long int mid = (l + r) / 2;
  update(node * 2, l, mid, ind, val);
  update(node * 2 + 1, mid + 1, r, ind, val);
  t[node] = max(t[2 * node], t[2 * node + 1]);
  return;
}
int main() {
  tt = 1;
  while (tt--) {
    long long int k;
    scanf("%lld %lld", &n, &k);
    long long int ans = 0;
    for (int i = 1; i <= n; i++) {
      scanf("%lld", &arr[i]);
      long long int a = query(1, 0, 300000, arr[i] - k, arr[i] + k);
      update(1, 0, 300000, arr[i], a + 1);
      ans = max(ans, a + 1);
    }
    printf("%lld\n", ans);
  }
  return 0;
}
