#include <bits/stdc++.h>
using namespace std;
struct Fenwick {
int n;
vector<int> bit;
Fenwick(int n) : n(n), bit(n+1, 0) {}
void update(int i, int val) {
for (++i; i <= n; i += i & -i)
bit[i] = max(bit[i], val);
}
int query(int i) {
int res = 0;
for (++i; i > 0; i -= i & -i)
res = max(res, bit[i]);
return res;
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, D;
cin >> N >> D;
vector<long long> A(N);
for (int i = 0; i < N; i++) cin >> A[i];
// 좌표압축
vector<long long> comp = A;
sort(comp.begin(), comp.end());
comp.erase(unique(comp.begin(), comp.end()), comp.end());
auto get = [&](long long x) {
return (int)(lower_bound(comp.begin(), comp.end(), x) - comp.begin());
};
int M = comp.size();
Fenwick fenw(M);
deque<pair<int,int>> window; // (index, dp[index])
vector<int> dp(N, 0);
for (int i = 0; i < N; i++) {
int ai = get(A[i]);
// A[j] < A[i] 조건에서 dp[j] + 1 최대값
int best = fenw.query(ai - 1) + 1;
// 그냥 이전 중에서 연결만 유지하는 경우
if (!window.empty()) {
best = max(best, window.back().second);
}
dp[i] = best;
// 현재 값 추가
fenw.update(ai, dp[i]);
window.emplace_back(i, dp[i]);
// 윈도우 크기 초과하면 제거
if (i - window.front().first >= D) {
// 제거할 값이 fenw에 남아있을 수 있는데,
// 정확히 지우려면 "세그먼트트리 + multiset" 구조 필요.
// 여기선 단순화 위해 lazy 방식으로 처리 가능.
window.pop_front();
}
}
cout << dp[N-1] << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgRmVud2ljayB7CiAgICBpbnQgbjsKICAgIHZlY3RvcjxpbnQ+IGJpdDsKICAgIEZlbndpY2soaW50IG4pIDogbihuKSwgYml0KG4rMSwgMCkge30KICAgIHZvaWQgdXBkYXRlKGludCBpLCBpbnQgdmFsKSB7CiAgICAgICAgZm9yICgrK2k7IGkgPD0gbjsgaSArPSBpICYgLWkpCiAgICAgICAgICAgIGJpdFtpXSA9IG1heChiaXRbaV0sIHZhbCk7CiAgICB9CiAgICBpbnQgcXVlcnkoaW50IGkpIHsKICAgICAgICBpbnQgcmVzID0gMDsKICAgICAgICBmb3IgKCsraTsgaSA+IDA7IGkgLT0gaSAmIC1pKQogICAgICAgICAgICByZXMgPSBtYXgocmVzLCBiaXRbaV0pOwogICAgICAgIHJldHVybiByZXM7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICAKICAgIGludCBOLCBEOwogICAgY2luID4+IE4gPj4gRDsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IEEoTik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgY2luID4+IEFbaV07CiAgICAKICAgIC8vIOyijO2RnOyVley2lQogICAgdmVjdG9yPGxvbmcgbG9uZz4gY29tcCA9IEE7CiAgICBzb3J0KGNvbXAuYmVnaW4oKSwgY29tcC5lbmQoKSk7CiAgICBjb21wLmVyYXNlKHVuaXF1ZShjb21wLmJlZ2luKCksIGNvbXAuZW5kKCkpLCBjb21wLmVuZCgpKTsKICAgIGF1dG8gZ2V0ID0gWyZdKGxvbmcgbG9uZyB4KSB7CiAgICAgICAgcmV0dXJuIChpbnQpKGxvd2VyX2JvdW5kKGNvbXAuYmVnaW4oKSwgY29tcC5lbmQoKSwgeCkgLSBjb21wLmJlZ2luKCkpOwogICAgfTsKICAgIAogICAgaW50IE0gPSBjb21wLnNpemUoKTsKICAgIEZlbndpY2sgZmVudyhNKTsKICAgIGRlcXVlPHBhaXI8aW50LGludD4+IHdpbmRvdzsgLy8gKGluZGV4LCBkcFtpbmRleF0pCiAgICB2ZWN0b3I8aW50PiBkcChOLCAwKTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICBpbnQgYWkgPSBnZXQoQVtpXSk7CiAgICAgICAgCiAgICAgICAgLy8gQVtqXSA8IEFbaV0g7KGw6rG07JeQ7IScIGRwW2pdICsgMSDstZzrjIDqsJIKICAgICAgICBpbnQgYmVzdCA9IGZlbncucXVlcnkoYWkgLSAxKSArIDE7CiAgICAgICAgCiAgICAgICAgLy8g6re464OlIOydtOyghCDspJHsl5DshJwg7Jew6rKw66eMIOycoOyngO2VmOuKlCDqsr3smrAKICAgICAgICBpZiAoIXdpbmRvdy5lbXB0eSgpKSB7CiAgICAgICAgICAgIGJlc3QgPSBtYXgoYmVzdCwgd2luZG93LmJhY2soKS5zZWNvbmQpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkcFtpXSA9IGJlc3Q7CiAgICAgICAgCiAgICAgICAgLy8g7ZiE7J6sIOqwkiDstpTqsIAKICAgICAgICBmZW53LnVwZGF0ZShhaSwgZHBbaV0pOwogICAgICAgIHdpbmRvdy5lbXBsYWNlX2JhY2soaSwgZHBbaV0pOwogICAgICAgIAogICAgICAgIC8vIOyciOuPhOyasCDtgazquLAg7LSI6rO87ZWY66m0IOygnOqxsAogICAgICAgIGlmIChpIC0gd2luZG93LmZyb250KCkuZmlyc3QgPj0gRCkgewogICAgICAgICAgICAvLyDsoJzqsbDtlaAg6rCS7J20IGZlbnfsl5Ag64Ko7JWE7J6I7J2EIOyImCDsnojripTrjbAsCiAgICAgICAgICAgIC8vIOygle2Zle2eiCDsp4DsmrDroKTrqbQgIuyEuOq3uOuovO2KuO2KuOumrCArIG11bHRpc2V0IiDqtazsobAg7ZWE7JqULgogICAgICAgICAgICAvLyDsl6zquLDshKAg64uo7Iic7ZmUIOychO2VtCBsYXp5IOuwqeyLneycvOuhnCDsspjrpqwg6rCA64qlLgogICAgICAgICAgICB3aW5kb3cucG9wX2Zyb250KCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBjb3V0IDw8IGRwW04tMV0gPDwgIlxuIjsKICAgIHJldHVybiAwOwp9