#include <bits/stdc++.h>
using namespace std;
const int maxn = 300005;
struct tree {
  int l, r, sum;
} t[maxn * 4];
int a[maxn], f[maxn], n, m, ans;
void build(int id, int l, int r) {
  t[id].l = l, t[id].r = r;
  if (l == r) {
    return;
  }
  int mid = (l + r) / 2;
  build(id * 2, l, mid);
  build(id * 2 + 1, mid + 1, r);
}
void pushup(int id) { t[id].sum = max(t[id * 2].sum, t[id * 2 + 1].sum); }
void add(int id, int v, int k) {
  if (t[id].l > v || t[id].r < v) {
    return;
  }
  if (t[id].l == t[id].r) {
    t[id].sum = max(t[id].sum, k);
    return;
  }
  add(id * 2, v, k);
  add(id * 2 + 1, v, k);
  pushup(id);
}
int ask(int id, int l, int r) {
  if (t[id].l > r || t[id].r < l) {
    return INT_MIN;
  }
  if (t[id].l >= l && t[id].r <= r) {
    return t[id].sum;
  }
  int ans = max(ask(id * 2, l, r), ask(id * 2 + 1, l, r));
  pushup(id);
  return ans;
}
int main() {
  scanf("%d%d", &n, &m);
  build(1, 1, maxn - 5);
  for (register int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    f[i] = ask(1, max(a[i] - m, 0), min(a[i] + m, maxn - 5)) + 1;
    add(1, a[i], f[i]);
    ans = max(ans, f[i]);
  }
  printf("%d", ans);
  return 0;
}
