#include <bits/stdc++.h>
using namespace std;
const int N = 1200005;
int tree[N];
void update(int node, int l, int r, int index, int value) {
  if (index > r || index < l) return;
  if (l == index) {
    tree[node] = value;
    return;
  }
  int mid = (l + r) / 2;
  update(node * 2, l, mid, index, value);
  update(node * 2 + 1, mid + 1, r, index, value);
  tree[node] = max(tree[node * 2], tree[node * 2 + 1]);
}
int query(int node, int l, int r, int i, int j) {
  if (i > r || j < l) return 0;
  if (i <= l && j >= r) return tree[node];
  int mid = (l + r) / 2;
  int p = query(node * 2, l, mid, i, j);
  int q = query(node * 2 + 1, mid + 1, r, i, j);
  return max(p, q);
}
int main() {
  int n, k, ans = 0;
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    int a;
    cin >> a;
    a++;
    int cur = 1 + query(1, 1, n + 1, max(1, a - k), a + k);
    ans = max(ans, cur);
    update(1, 1, n + 1, a, cur);
  }
  cout << (ans) << endl;
  return 0;
}
