#include <bits/stdc++.h>
#define NMAX 100005
#define ValMax 100000
using namespace std;
int n , k;
int val[NMAX];
int segment[4 * NMAX];
void update(int node , int l , int r , int pos , int length)
{
if(pos < l || pos > r) return;
if(l == r)
{
segment[node] = max(segment[node] , length);
return;
}
int mid = (l + r)>> 1;
update(2 * node , l , mid , pos , length);
update(2 * node + 1 , mid + 1 , r , pos , length);
segment[node] = max(segment[2 * node] , segment[2 * node + 1]);
}
int GetPre(int node , int l , int r , int u , int v)
{
if(u > r || v < l) return 0;
if(u <= l && r <= v) return segment[node];
int mid = ( l + r ) >> 1;
return max(GetPre(2 * node , l , mid , u , v) , GetPre(2 * node + 1 , mid + 1 , r , u , v));
}
void process()
{
cin>> n >> k;
for(int i = 1 ; i <= n ; i++) cin>>val[i];
for(int i = 1 ; i <= n ; i++)
{
update(1 , 1 , ValMax , val[i] , GetPre(1 , 1 , ValMax , val[i] - k , val[i] - 1) + 1);
}
cout<<GetPre(1 , 1 , ValMax , 1 , ValMax);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
process();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgTk1BWCAxMDAwMDUKI2RlZmluZSBWYWxNYXggMTAwMDAwCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuICwgazsKaW50IHZhbFtOTUFYXTsKaW50IHNlZ21lbnRbNCAqIE5NQVhdOwoKdm9pZCB1cGRhdGUoaW50IG5vZGUgLCBpbnQgbCAsIGludCByICwgaW50IHBvcyAsIGludCBsZW5ndGgpCnsKICAgIGlmKHBvcyA8IGwgfHwgcG9zID4gcikgcmV0dXJuOwoKICAgIGlmKGwgPT0gcikKICAgIHsKICAgICAgICBzZWdtZW50W25vZGVdID0gbWF4KHNlZ21lbnRbbm9kZV0gLCBsZW5ndGgpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgbWlkID0gKGwgKyByKT4+IDE7CgogICAgdXBkYXRlKDIgKiBub2RlICwgbCAsIG1pZCAsIHBvcyAsIGxlbmd0aCk7CgogICAgdXBkYXRlKDIgKiBub2RlICsgMSAsIG1pZCArIDEgLCByICwgcG9zICwgbGVuZ3RoKTsKCiAgICBzZWdtZW50W25vZGVdID0gbWF4KHNlZ21lbnRbMiAqIG5vZGVdICwgc2VnbWVudFsyICogbm9kZSArIDFdKTsKfQoKaW50IEdldFByZShpbnQgbm9kZSAsIGludCBsICwgaW50IHIgLCBpbnQgdSAsIGludCB2KQp7CiAgICBpZih1ID4gciB8fCB2IDwgbCkgIHJldHVybiAwOwoKICAgIGlmKHUgPD0gbCAmJiByIDw9IHYpICByZXR1cm4gc2VnbWVudFtub2RlXTsKCiAgICBpbnQgbWlkID0gKCBsICsgciApID4+IDE7CgogICAgcmV0dXJuIG1heChHZXRQcmUoMiAqIG5vZGUgLCBsICwgbWlkICwgdSAsIHYpICwgR2V0UHJlKDIgKiBub2RlICsgMSAsIG1pZCArIDEgLCByICwgdSAsIHYpKTsKfQoKdm9pZCBwcm9jZXNzKCkKewogICAgY2luPj4gbiA+PiBrOwoKICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspICBjaW4+PnZhbFtpXTsKCiAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBuIDsgaSsrKSAgCiAgICB7IAogICAgCXVwZGF0ZSgxICwgMSAsIFZhbE1heCAsIHZhbFtpXSAsIEdldFByZSgxICwgMSAsIFZhbE1heCAsIHZhbFtpXSAtIGsgLCB2YWxbaV0gLSAxKSArIDEpOwogICAgfQoKICAgIGNvdXQ8PEdldFByZSgxICwgMSAsIFZhbE1heCAsIDEgLCBWYWxNYXgpOwp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKICAgIHByb2Nlc3MoKTsKICAgIHJldHVybiAwOwp9Cg==