#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
#define rep(i,n) for(int i=0; i<n; i++)
#define REP(i,m,n) for(ll i=(ll)(m);i<(ll)(n);i++)
#define fi first
#define se second
long long mo = 1000000007;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> Pii;
typedef pair<ll,ll> Pll;
typedef pair<ll,Pll> PlP;
template<class T, class S> void cmin(T &a, const S &b) { if (a > b)a = b; }
template<class T, class S> void cmax(T &a, const S &b) { if (a < b)a = b; }
template<class A>void PR(A a,ll n){rep(i,n){if(i)cout<<' ';cout<<a[i];}cout << "\n";}
ld PI=3.14159265358979323846;
using namespace atcoder;

int op(int a, int b) {
    return max(a, b);
}

int e() {
    return (int)(0);
}

int target = 0;

int main(){
    int N,K;
    cin >> N >> K;
    vector<int> A(N);//memo(N+1);
    rep(i,N){
        cin >> A[i];
    }
    segtree<int, op, e> seg(int(600010));
    rep(i,N){
        ll tmp = seg.prod(max(A[i]-K, 0), A[i]+K+1);
        seg.set(A[i],tmp+1);
    }

    cout << seg.all_prod() << endl;
}