#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;

#define REP(i, n) for(int i = 0; i < n; i++)
#define REPR(i, n) for(int i = n; i >= 0; i--)
#define FOR(i, m, n) for(int i = m; i < n; i++)
#define ALL(obj) (obj).begin(), (obj).end()
#define INF 1e9
#define LINF 1e18
typedef long long ll;


int main() {
    int N,K; cin >> N >> K;
    vector<int> A(N);
    REP(i,N){
        cin >> A[i];
    }
    
    set<pair<int,pair<int,int>>> s;
    s.insert({A[0],{1, 1}});

    s.insert({A[0],{1, -1}});

    FOR(i,1,N){
        //cout << i << " ";

        bool ok = false;

        set<pair<int,pair<int,int>>> next;
        set<pair<int,pair<int,int>>> ers;

        for(auto a: s){
            if(a.second.second==1){//上昇
                if (A[i] >= a.first && A[i] - a.first <= K){
                    ers.insert(a);
                    next.insert({A[i], {a.second.first+1, 1}});
                    next.insert({A[i], {a.second.first+1, -1}});
                    ok = true;
                } 
            }else{
                if (A[i] <= a.first && a.first - A[i] <= K){
                    ers.insert(a);
                    next.insert({A[i], {a.second.first+1, 1}});
                    next.insert({A[i], {a.second.first+1, -1}});
                    ok = true;
                } 
            }  
        }
        if(!ok){
            s.insert({A[i],{1,1}});
            s.insert({A[i],{1,-1}});
        }
        for(auto a: next){
            s.insert(a);
        }
        if(ers.size() > 0){
            for(auto a: ers){
                s.erase(a);
            }
        }
        int ans = 0;
        for(auto a: s){
            ans = max(ans, a.second.first);
        }
        //cout << s.size() << " ";
        //cout << ans << endl;

    }

    int ans = 0;
    for(auto a: s){
        ans = max(ans, a.second.first);
    }
    cout << ans << endl;
    return 0;
}