#include<iostream>
#include<stdio.h>
using namespace std;
const int maxn=1e7;
struct point{
    int l,r,sum;
}t[maxn];
int n,k,sum,ans;
void make(int left,int right,int num){
    t[num].l=left;
    t[num].r=right;
    if(left==right) return;
    else{
        make(left,(left+right)/2,num*2);
        make((right+left)/2+1,right,num*2+1);
        t[num].sum=t[num*2].sum+t[num*2+1].sum;
    }
}
void find(int left,int right,int num){
	if(t[num].l==t[num].r) return;
    if(!(left<=t[num].l&&right>=t[num].r)){
         if(right<=(t[num].l+t[num].r)/2)
         find(left,right,num*2);
         else if(left>=(t[num].l+t[num].r)/2+1)
         find(left,right,num*2+1);
         else{
             find(left,right,num*2);
             find(left,right,num*2+1);
         }
     }
     else{
     	sum=max(sum,t[num].sum);
	 }
}
void add(int x,int y,int num){
    if(t[num].l==t[num].r){
    	t[num].sum++;
    	return;
	}
    if(y<=(t[num].l+t[num].r)/2)
    add(x,y,num*2);
    else if(x>=(t[num].l+t[num].r)/2) add(x,y,num*2+1);
    else{
    	add(x,y,num*2);
    	add(x,y,num*2+1);
	}
	t[num].sum=max(t[num*2].sum,t[num*2+1].sum);
}
int main(){
	cin>>n>>k;
    make(0,3*n,1);
   	for(int i=1,x;i<=n;i++){
   		cin>>x;
   		add(x,x+2*k,1);
   		sum=0;
   		find(x,x+2*k,1);
   		ans=max(sum,ans);
	}
	cout<<ans;
}