#include <bits/stdc++.h>
using namespace std;
struct point {
  int l, r, sum;
} t[340000];
int n, k, sum, ans;
void make(int left, int right, int num) {
  t[num].l = left;
  t[num].r = right;
  if (left == right)
    return;
  else {
    make(left, (left + right) / 2, num * 2);
    make((right + left) / 2 + 1, right, num * 2 + 1);
    t[num].sum = t[num * 2].sum + t[num * 2 + 1].sum;
  }
}
void find(int left, int right, int num) {
  if (t[num].l == t[num].r) return;
  if (!(left <= t[num].l && right >= t[num].r)) {
    if (right <= (t[num].l + t[num].r) / 2)
      find(left, right, num * 2);
    else if (left >= (t[num].l + t[num].r) / 2 + 1)
      find(left, right, num * 2 + 1);
    else {
      find(left, right, num * 2);
      find(left, right, num * 2 + 1);
    }
  } else {
    sum = max(sum, t[num].sum);
  }
}
void add(int x, int y, int num) {
  if (t[num].l == t[num].r) {
    t[num].sum++;
    return;
  }
  if (y <= (t[num].l + t[num].r) / 2)
    add(x, y, num * 2);
  else if (x >= (t[num].l + t[num].r) / 2)
    add(x, y, num * 2 + 1);
  else {
    add(x, y, num * 2);
    add(x, y, num * 2 + 1);
  }
  t[num].sum = max(t[num * 2].sum, t[num * 2 + 1].sum);
}
int main() {
  cin >> n >> k;
  make(1, 3 * n, 1);
  for (int i = 1, x; i <= n; i++) {
    cin >> x;
    add(x, x + 2 * k, 1);
    sum = 0;
    find(x, x + 2 * k, 1);
    ans = max(sum, ans);
  }
  cout << ans;
}
