#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 300000
int t[4*N+20];
void update(int v,int tl,int tr,int pos,int val)
{
	int tm=(tl+tr)/2;
	if(tl==tr)
	{
		t[v]=max(t[v],val);
		return ;
	}
	if(pos<=tm)
		update(2*v,tl,tm,pos,val);
	else if(pos>tm)
		update(2*v+1,tm+1,tr,pos,val);
	t[v]=max(t[2*v],t[2*v+1]);
}
int query(int v,int tl,int tr,int l,int r)
{
	if(tr<l||tl>r)
		return 0;
	if(l<=tl&&tr<=r)
		return t[v];
	int tm=(tl+tr)/2;
	return max(query(2*v,tl,tm,l,r),query(2*v+1,tm+1,tr,l,r));
}
int32_t main()
{
 
  	int n,k;
  	cin>>n>>k;

  	int arr[n];
  	for(int i=0;i<n;i++)
  	cin>>arr[i];

  	int temp;
  	for(int i=0;i<n;i++)
  	{
  		temp=query(1,0,N,max(arr[i]-k,0ll),min(arr[i]+k,300000ll));
  		update(1,0,N,arr[i],temp+1);
  	}
  	cout<<query(1,0,N,0,N)<<endl;
return 0;
}