2 1
1 1
 4 1
2 2 1 1
 10 1
2 6 3 4 2 4 4 3 2 1
 2 1
999152 999153
 8 1000000
1 1 5 1000000 1000000 2 2 2
 9 2
1 6 1 5 5 8 6 8 7
 15 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 4
8
 10 1
6 3 1 3 6 4 1 3 6 4
 10 1
1 2 3 5 6 8 10 11 9 4
 7 2
1 5 5 8 9 8 8
 2 1000000
1 1000000
 8 2
3 13 9 8 3 13 9 14
 1 1
1
 2 1
1 2

2
 2
 4
 1
 2
 4
 15
 1
 7
 2
 4
 1
 5
 1
 1

#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 9;
const int Mod = 1e9 + 7;
inline int dcmp(double x) {
  if (fabs(x) <= 1e-9) return 0;
  return x < 0 ? -1 : 1;
}
inline int scan() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline long long scan(long long x) {
  int f = 1;
  char ch = getchar();
  x = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
struct Point {
  int x, y, id;
  Point(int x = 0, int y = 0) : x(x), y(y) {}
  Point operator-(const Point &a) const { return Point(x - a.x, y - a.y); }
  Point operator*(const long long &a) const { return Point(x * a, y * a); }
  Point operator+(const Point &a) const { return Point(x + a.x, y + a.y); }
  bool operator==(const Point &a) const {
    return dcmp(x - a.x) == 0 && dcmp(y - a.y) == 0;
  }
  bool operator<(const Point &a) const {
    if (x == a.x) return y < a.y;
    return x < a.x;
  }
  void read() { scanf("%d%d", &x, &y); }
  void out() { cout << x << " " << y << endl; }
};
double Dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double dis(Point a) { return sqrt(Dot(a, a)); }
long long Cross(Point a, Point b) { return a.x * 1LL * b.y - a.y * 1LL * b.x; }
bool chk(Point p1, Point p2, Point p3, Point p) {
  return abs(Cross(p2 - p, p1 - p)) + abs(Cross(p3 - p, p2 - p)) +
             abs(Cross(p1 - p, p3 - p)) ==
         abs(Cross(p2 - p1, p3 - p1));
}
int n, k, ti;
int a[200005], vis[200005];
void solve() {
  n = scan();
  k = scan();
  for (int i = 1; i <= n; i++) a[i] = scan();
  memset(vis, 0, sizeof(vis));
  sort(a + 1, a + 1 + n);
  for (int i = 1; i <= n; i++) {
    ti = i;
    while (ti - 1) {
      ti--;
      if (vis[ti]) break;
      if (a[ti] + k < a[i]) break;
      if (a[ti] < a[i])
        vis[ti] = 1;
      else
        break;
    }
  }
  ti = 0;
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) ti++;
  }
  cout << ti << endl;
}
int main() {
  int t = 1;
  for (int i = 1; i <= t; i++) {
    solve();
  }
  return 0;
}
