#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
long long mod2 = 998244353;
string char_to_str(char c) {
  string tem(1, c);
  return tem;
}
long long max(long long a, long long b) {
  if (a > b) {
    return a;
  }
  return b;
}
long long min(long long a, long long b) {
  if (a < b) {
    return a;
  }
  return b;
}
long long n, k;
long long a[300005];
long long tree[4 * 300005];
long long dp[300005];
void build(long long node, long long l, long long r) {
  if (l > r) {
    return;
  }
  if (l == r) {
    tree[node] = 0;
    return;
  }
  long long mid = (l + r) / 2;
  build(2 * node + 1, l, mid);
  build(2 * node + 2, mid + 1, r);
  tree[node] = max(tree[2 * node + 1], tree[2 * node + 2]);
}
void update(long long node, long long l, long long r, long long pos,
            long long val) {
  if (l > r || l > pos || r < pos) {
    return;
  }
  if (l == r && l == pos) {
    tree[node] = val;
    return;
  }
  long long mid = (l + r) / 2;
  update(2 * node + 1, l, mid, pos, val);
  update(2 * node + 2, mid + 1, r, pos, val);
  tree[node] = max(tree[2 * node + 1], tree[2 * node + 2]);
}
long long query(long long node, long long l, long long r, long long start,
                long long end) {
  if (l > r || l > end || r < start) {
    return 0;
  }
  if (l >= start && r <= end) {
    return tree[node];
  }
  long long mid = (l + r) / 2;
  long long z1 = query(2 * node + 1, l, mid, start, end);
  long long z2 = query(2 * node + 2, mid + 1, r, start, end);
  return max(z1, z2);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  cin >> n >> k;
  long long max1 = 0;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    max1 = max(max1, a[i]);
  }
  for (int i = 0; i < n; ++i) {
    dp[i] = 1;
  }
  build(0, 0, max1);
  for (int i = 0; i < n; ++i) {
    long long st = max(0, a[i] - k);
    long long en = min(max1, a[i] + k);
    long long x1 = query(0, 0, max1, st, en);
    dp[i] = max(dp[i], x1 + 1);
    update(0, 0, n - 1, a[i], dp[i]);
  }
  long long ans = 0;
  for (int i = 0; i < n; ++i) {
    ans = max(ans, dp[i]);
  }
  cout << ans;
  return 0;
}
