#include<iostream>
#include<vector>

using namespace std;

void Set(int a,int b,int i,int l,int r,vector<int>& st) {
  if(a < l || r <= a)return;
  else if(l == a && r-l == 1) {
    st[i] = max(b,st[i]);
    return;
  }
  else {
    Set(a,b,i*2+1,l,(l+r)/2,st);
    Set(a,b,i*2+2,(l+r)/2,r,st);
    st[i] = max(st[i*2+1],st[i*2+2]);
    return;
  }
}

int Max(int a,int b,int i,int l,int r,vector<int>& st) {
  if(b <= l || r <= a)return 0;
  else if(a <= l && r <= b)return st[i];
  else return max(Max(a,b,2*i+1,l,(l+r)/2,st),Max(a,b,2*i+2,(l+r)/2,r,st));
}

int main() {
  int N,K;
  cin >> N >> K;
  vector<int> A(N),st(1048575,0);
  int i;
  for(i=0;i<N;i++)cin >> A[i];
  for(i=0;i<N;i++)Set(A[i],Max(max(0,A[i]-K),min(524288,A[i]+K+1),0,0,524288,st)+1,0,0,524288,st);
  cout << Max(0,524288,0,0,524288,st) << endl;
}