#include <bits/stdc++.h>
using namespace std;
const long long N = 300010;
long long tree[N * 4];
long long val(long long node, long long b, long long e, long long i,
              long long j) {
  long long x, y;
  if (b > j || e < i) return 0;
  if (b >= i && e <= j) return tree[node];
  x = val(node * 2, b, (b + e) / 2, i, j);
  y = val(node * 2 + 1, (b + e) / 2 + 1, e, i, j);
  return max(x, y);
}
void update_value(long long node, long long b, long long e, long long i,
                  long long num) {
  if (b == e && b == i) {
    tree[node] = max(tree[node], num);
    return;
  }
  if (i < b || i > e) return;
  long long l = node * 2;
  long long r = l + 1;
  long long m = (b + e) / 2;
  update_value(l, b, m, i, num);
  update_value(r, m + 1, e, i, num);
  tree[node] = max(tree[l], tree[r]);
}
int main() {
  memset(tree, 0, sizeof(tree));
  long long n, k;
  cin >> n >> k;
  for (long long i = 0; i < n; i++) {
    long long s;
    cin >> s;
    long long l = max(0LL, s - k);
    long long r = min(10LL, s + k);
    long long q = val(1, 0, N, l, r);
    update_value(1, 0, N, s, q + 1);
  }
  cout << val(1, 0, N, 0, N) << "\n";
}
