/**
* Author: trviet
* Studies at: Le Hong Phong High School for the Gifted
**/
#include <bits/stdc++.h>
#define ____vuviet__ signed main
#define taskname "CEOI18_glo"
using namespace std;
constexpr int maxn = 2e5 + 5;
#define all(x) x.begin(), x.end()
int n, x, t[maxn], f[maxn], g[maxn];
vector<int> values;
struct SegmentTree
{
int sz;
vector<int> st;
SegmentTree(int sz)
{
this->sz = sz;
st.resize(4 * sz + 5);
}
void update(int id, int l, int r, int i, int v)
{
if (l == r)
{
st[id] = v;
return;
}
int mid = (l + r) / 2;
if (i <= mid) {
update(id * 2, l, mid, i, v);
} else {
update(id * 2 + 1, mid + 1, r, i, v);
}
st[id] = max(st[id * 2], st[id * 2 + 1]);
}
int query(int id, int l, int r, int u, int v)
{
if (r < u || l > v) return 0;
if (l == r) return st[id];
int mid = (l + r) / 2;
int res = query(id * 2, l, mid, u, v);
return max(res, query(id * 2 + 1, mid + 1, r, u, v));
}
void update(int i, int v)
{
update(1, 1, sz, i, v);
}
int query(int u, int v)
{
return query(1, 1, sz, u, v);
}
};
void ReadData()
{
cin >> n >> x;
for (int i = 1; i <= n; ++i)
cin >> t[i], f[i] = g[i] = 1, values.push_back(t[i]);
}
int idx(int x)
{
return lower_bound(all(values), x) - values.begin() + 1;
}
void solvebytrvietbels()
{
ReadData();
sort(all(values));
values.resize(unique(all(values)) - values.begin());
int m = values.size();
SegmentTree l(m), r(m), segtree(m);
for (int i = 1; i <= n; ++i)
{
f[i] = 1 + l.query(1, idx(t[i]) - 1);
l.update(idx(t[i]), f[i]);
}
for (int i = n; i >= 1; --i)
{
g[i] = 1 + r.query(idx(t[i]) + 1, m);
r.update(idx(t[i]), g[i]);
}
int ans = 0;
for (int i = n; i >= 1; --i)
{
int p = idx(t[i] - x + 1);
int best = (p <= m ? segtree.query(p, m) : 0);
ans = max(ans, f[i] + best);
segtree.update(idx(t[i]), g[i]);
}
cout << ans;
}
void freopen_stdio(string speech)
{
cin.tie(0)->sync_with_stdio(0);
cerr << speech << "\n";
if (fopen(taskname ".inp", "r"))
{
freopen(taskname ".inp", "r", stdin);
freopen(taskname ".out", "w", stdout);
}
}
____vuviet__()
{
freopen_stdio("...miss you...");
int t = 1;
// cin >> t;
while (t-- > 0)
solvebytrvietbels();
return 0;
}