#include <bits/stdc++.h>
using namespace std;
const long long int M = 1e9 + 7;
long long int mod(long long int n) { return (n % M + M) % M; }
long long int modAdd(long long int a, long long int b) {
  return mod(mod(a) + mod(b));
}
long long int modMul(long long int a, long long int b) {
  return mod(mod(a) * mod(b));
}
long long int modMinus(long long int a, long long int b) {
  return mod(mod(a) - mod(b));
}
long long int modpow(long long int x, long long int n) {
  if (n == 0) return 1 % M;
  if (n == 1) return x % M;
  long long int u = modpow(x, n / 2);
  u = modMul(u, u);
  if (n % 2) u = modMul(u, x);
  return u;
}
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
bool isPrime(long long int n) {
  int end = sqrt(n);
  for (int i = 2; i <= end; i++)
    if (n % i == 0) return false;
  return true;
}
void travel(int start, vector<int> &visited, vector<vector<int>> &graph) {
  visited[start] = 1;
  for (int i = 0; i < graph[start].size(); i++) {
    if (visited[graph[start][i]] == 0) travel(graph[start][i], visited, graph);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t = 1;
  while (t--) {
    int n, k;
    cin >> n >> k;
    vector<int> data(n);
    vector<int> dp(n);
    for (int i = 0; i < n; i++) cin >> data[i];
    dp[n - 1] = 1;
    for (int i = n - 2; i >= 0; i--) {
      int ans = 0;
      for (int j = i + 1; j < n; j++) {
        if (data[j] >= data[i] - k && data[j] <= data[i] + k)
          ans = max(ans, dp[j]);
      }
      dp[i] = ans + 1;
    }
    cout << dp[0] << endl;
  }
  return 0;
}
