#include <bits/stdc++.h>
using namespace std;
struct SegTree {
int n;
vector<int> st;
SegTree(int n_=0): n(n_), st(4*n_+5, 0) {}
void upd(int p, int v, int node, int l, int r){
if(l==r){ st[node]=v; return; }
int m=(l+r)>>1;
if(p<=m) upd(p,v,node<<1,l,m);
else upd(p,v,node<<1|1,m+1,r);
st[node]=max(st[node<<1], st[node<<1|1]);
}
void update(int p, int v){ if(n) upd(p,v,1,0,n-1); }
int qry(int ql, int qr, int node, int l, int r){
if(qr<l || r<ql) return 0;
if(ql<=l && r<=qr) return st[node];
int m=(l+r)>>1;
return max(qry(ql,qr,node<<1,l,m), qry(ql,qr,node<<1|1,m+1,r));
}
int query(int l, int r){ if(l>r || !n) return 0; return qry(l,r,1,0,n-1); }
};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, D;
if(!(cin >> N >> D)) return 0;
vector<long long> A(N);
for(int i=0;i<N;i++) cin >> A[i];
// 좌표압축
vector<long long> vals = A;
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
int M = (int)vals.size();
vector<int> rk(N);
for(int i=0;i<N;i++){
rk[i] = int(lower_bound(vals.begin(), vals.end(), A[i]) - vals.begin()); // 0..M-1
}
// 각 값등급별로 창 내 dp의 최대를 유지하는 deque (index 증가, dp 내림차순)
vector<deque<pair<int,int>>> bucket(M);
SegTree seg(M);
vector<int> dp(N, 0);
int ans = 0;
for(int i=0;i<N;i++){
// 창에서 빠져나가는 인덱스 (i-D-1) 제거
int out = i - D - 1;
if(out >= 0){
int r = rk[out];
if(!bucket[r].empty() && bucket[r].front().first == out){
bucket[r].pop_front();
seg.update(r, bucket[r].empty() ? 0 : bucket[r].front().second);
}
// 만약 out가 deque에서 이미 뒷부분에서 제거되어 없었다면, 할 일 없음
}
// dp[i] 계산: 창 [i-D, i-1]에서 값 < A[i]인 것들 중 dp 최댓값 + 1
int bestLess = (rk[i] > 0) ? seg.query(0, rk[i]-1) : 0;
dp[i] = bestLess + 1;
// 현재 값등급의 deque에 (i, dp[i]) 삽입: dp 내림차순 유지
int r = rk[i];
auto &dq = bucket[r];
while(!dq.empty() && dq.back().second <= dp[i]) dq.pop_back();
dq.emplace_back(i, dp[i]);
seg.update(r, dq.front().second);
ans = max(ans, dp[i]);
}
cout << ans << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgU2VnVHJlZSB7CiAgICBpbnQgbjsKICAgIHZlY3RvcjxpbnQ+IHN0OwogICAgU2VnVHJlZShpbnQgbl89MCk6IG4obl8pLCBzdCg0Km5fKzUsIDApIHt9CiAgICB2b2lkIHVwZChpbnQgcCwgaW50IHYsIGludCBub2RlLCBpbnQgbCwgaW50IHIpewogICAgICAgIGlmKGw9PXIpeyBzdFtub2RlXT12OyByZXR1cm47IH0KICAgICAgICBpbnQgbT0obCtyKT4+MTsKICAgICAgICBpZihwPD1tKSB1cGQocCx2LG5vZGU8PDEsbCxtKTsKICAgICAgICBlbHNlICAgICB1cGQocCx2LG5vZGU8PDF8MSxtKzEscik7CiAgICAgICAgc3Rbbm9kZV09bWF4KHN0W25vZGU8PDFdLCBzdFtub2RlPDwxfDFdKTsKICAgIH0KICAgIHZvaWQgdXBkYXRlKGludCBwLCBpbnQgdil7IGlmKG4pIHVwZChwLHYsMSwwLG4tMSk7IH0KICAgIGludCBxcnkoaW50IHFsLCBpbnQgcXIsIGludCBub2RlLCBpbnQgbCwgaW50IHIpewogICAgICAgIGlmKHFyPGwgfHwgcjxxbCkgcmV0dXJuIDA7CiAgICAgICAgaWYocWw8PWwgJiYgcjw9cXIpIHJldHVybiBzdFtub2RlXTsKICAgICAgICBpbnQgbT0obCtyKT4+MTsKICAgICAgICByZXR1cm4gbWF4KHFyeShxbCxxcixub2RlPDwxLGwsbSksIHFyeShxbCxxcixub2RlPDwxfDEsbSsxLHIpKTsKICAgIH0KICAgIGludCBxdWVyeShpbnQgbCwgaW50IHIpeyBpZihsPnIgfHwgIW4pIHJldHVybiAwOyByZXR1cm4gcXJ5KGwsciwxLDAsbi0xKTsgfQp9OwoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICAKICAgIGludCBOLCBEOwogICAgaWYoIShjaW4gPj4gTiA+PiBEKSkgcmV0dXJuIDA7CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBBKE4pOwogICAgZm9yKGludCBpPTA7aTxOO2krKykgY2luID4+IEFbaV07CgogICAgLy8g7KKM7ZGc7JWV7LaVCiAgICB2ZWN0b3I8bG9uZyBsb25nPiB2YWxzID0gQTsKICAgIHNvcnQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpKTsKICAgIHZhbHMuZXJhc2UodW5pcXVlKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSksIHZhbHMuZW5kKCkpOwogICAgaW50IE0gPSAoaW50KXZhbHMuc2l6ZSgpOwogICAgdmVjdG9yPGludD4gcmsoTik7CiAgICBmb3IoaW50IGk9MDtpPE47aSsrKXsKICAgICAgICBya1tpXSA9IGludChsb3dlcl9ib3VuZCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCksIEFbaV0pIC0gdmFscy5iZWdpbigpKTsgLy8gMC4uTS0xCiAgICB9CgogICAgLy8g6rCBIOqwkuuTseq4ieuzhOuhnCDssL0g64K0IGRw7J2YIOy1nOuMgOulvCDsnKDsp4DtlZjripQgZGVxdWUgKGluZGV4IOymneqwgCwgZHAg64K066a87LCo7IicKQogICAgdmVjdG9yPGRlcXVlPHBhaXI8aW50LGludD4+PiBidWNrZXQoTSk7CiAgICBTZWdUcmVlIHNlZyhNKTsKCiAgICB2ZWN0b3I8aW50PiBkcChOLCAwKTsKICAgIGludCBhbnMgPSAwOwoKICAgIGZvcihpbnQgaT0wO2k8TjtpKyspewogICAgICAgIC8vIOywveyXkOyEnCDruaDsoLjrgpjqsIDripQg7J24642x7IqkIChpLUQtMSkg7KCc6rGwCiAgICAgICAgaW50IG91dCA9IGkgLSBEIC0gMTsKICAgICAgICBpZihvdXQgPj0gMCl7CiAgICAgICAgICAgIGludCByID0gcmtbb3V0XTsKICAgICAgICAgICAgaWYoIWJ1Y2tldFtyXS5lbXB0eSgpICYmIGJ1Y2tldFtyXS5mcm9udCgpLmZpcnN0ID09IG91dCl7CiAgICAgICAgICAgICAgICBidWNrZXRbcl0ucG9wX2Zyb250KCk7CiAgICAgICAgICAgICAgICBzZWcudXBkYXRlKHIsIGJ1Y2tldFtyXS5lbXB0eSgpID8gMCA6IGJ1Y2tldFtyXS5mcm9udCgpLnNlY29uZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8g66eM7JW9IG91dOqwgCBkZXF1ZeyXkOyEnCDsnbTrr7gg65K367aA67aE7JeQ7IScIOygnOqxsOuQmOyWtCDsl4bsl4jri6TrqbQsIO2VoCDsnbwg7JeG7J2MCiAgICAgICAgfQoKICAgICAgICAvLyBkcFtpXSDqs4TsgrA6IOywvSBbaS1ELCBpLTFd7JeQ7IScIOqwkiA8IEFbaV3snbgg6rKD65OkIOykkSBkcCDstZzrjJPqsJIgKyAxCiAgICAgICAgaW50IGJlc3RMZXNzID0gKHJrW2ldID4gMCkgPyBzZWcucXVlcnkoMCwgcmtbaV0tMSkgOiAwOwogICAgICAgIGRwW2ldID0gYmVzdExlc3MgKyAxOwoKICAgICAgICAvLyDtmITsnqwg6rCS65Ox6riJ7J2YIGRlcXVl7JeQIChpLCBkcFtpXSkg7IK97J6FOiBkcCDrgrTrprzssKjsiJwg7Jyg7KeACiAgICAgICAgaW50IHIgPSBya1tpXTsKICAgICAgICBhdXRvICZkcSA9IGJ1Y2tldFtyXTsKICAgICAgICB3aGlsZSghZHEuZW1wdHkoKSAmJiBkcS5iYWNrKCkuc2Vjb25kIDw9IGRwW2ldKSBkcS5wb3BfYmFjaygpOwogICAgICAgIGRxLmVtcGxhY2VfYmFjayhpLCBkcFtpXSk7CiAgICAgICAgc2VnLnVwZGF0ZShyLCBkcS5mcm9udCgpLnNlY29uZCk7CgogICAgICAgIGFucyA9IG1heChhbnMsIGRwW2ldKTsKICAgIH0KCiAgICBjb3V0IDw8IGFucyA8PCAnXG4nOwogICAgcmV0dXJuIDA7Cn0=