#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <random>
#include <queue>
#include <numeric>
#include <array>
#include <iomanip>
#include <stack>
#include <chrono>
#include <climits>
using namespace std;
using ll = long long;
using ld = long double;
using vi = vector<ll>;
using vii = vector<vi>;
using viii = vector<vii>;
using pi = pair<ll, ll>;
using vpi = vector<pi>;
using vb = vector<bool>;
using vs = vector<string>;
#define vec vector
#define cmax(x, y) x = max({x, y})
#define cmin(x, y) x = min({x, y})
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
const ll N = 3e5 + 5, MOD = 998244353, INF = (ll)1e18, K = 20, B = 836;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
void solve() {
ll n, d; cin >> n >> d;
set<array<ll, 3>> st;
ll ans = 0;
vi a(n); for (ll& x : a) cin >> x;
for (ll i = 0; i < n; i++) {
auto it = st.lower_bound({a[i], -INF, -INF});
if (it != st.end()) st.erase(it);
it = st.lower_bound({ a[i], -INF, -INF });
ll pos = 1;
while (it != st.begin()) {
it--;
auto [f, s, t] = *it;
if (i - s > d) {
st.erase(it);
}
else {
pos = t + 1;
break;
}
it = st.lower_bound({ a[i], -INF, -INF });;
}
st.insert({a[i], i, pos});
cmax(ans, pos);
}
cout << ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
long long tt = 1;
//cin >> tt;
while (tt--) {
solve();
cout << '\n';
}
return 0;
}
/*
Какие темы повторить:
1) мст
2) 2сат
3) точки артикуляции
4) ксор базис
5) эйлеровый цикл, путь
6) кмп
7) конвекс хулл
8) вафельное дерево
9) суфиксный массив
10) суффиксный автомат
11) ним
*/