#include <bits/stdc++.h>
using namespace std;
bool vis[100002];
vector<int> adj[100002];
void dfs(int node) {
  if (vis[node]) return;
  vis[node] = true;
  for (int v : adj[node]) {
    dfs(v);
  }
}
int main() {
  int n, k;
  cin >> n >> k;
  int a[n];
  set<int> st;
  set<int>::iterator lb;
  set<int>::iterator ub;
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < n; i++) {
    lb = st.lower_bound(a[i]);
    ub = st.upper_bound(a[i]);
    bool f1 = true, f2 = true;
    if (st.empty()) {
      st.insert(a[i]);
      continue;
    }
    if (ub == st.begin()) {
      f1 = false;
    }
    if (lb == st.end()) {
      f2 = false;
    }
    if (f1 && f2) {
      ub--;
      int l = (*lb);
      int h = (*ub);
      if (a[i] - l <= k && h - a[i] <= k) st.insert(a[i]);
    } else if (f1 && !f2) {
      ub--;
      if (a[i] - (*ub) <= k) st.insert(a[i]);
    } else if (!f1 && f2) {
      if ((*lb) - a[i] <= k) st.insert(a[i]);
    }
  }
  cout << (int)(st.size()) << endl;
  return 0;
}
