#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;
cin >> N >> D;
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
}
vector<int> dp(N, 0);
// 각 값 등급별로 "유효 구간 안에서의 dp 최대값"을 유지
vector<deque<pair<int,int>>> bucket(M);
SegTree seg(M);
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);
}
}
// dp[i] = 1 + max dp[j], (j∈[i-D,i-1], A[j] < A[i])
int bestLess = (rk[i] > 0) ? seg.query(0, rk[i]-1) : 0;
dp[i] = bestLess + 1;
// 현재 값 삽입
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);
}
cout << dp[N-1] << "\n"; // 반드시 마지막 날 포함
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgU2VnVHJlZSB7CiAgICBpbnQgbjsKICAgIHZlY3RvcjxpbnQ+IHN0OwogICAgU2VnVHJlZShpbnQgbl89MCk6IG4obl8pLCBzdCg0Km5fKzUsIDApIHt9CiAgICB2b2lkIHVwZChpbnQgcCwgaW50IHYsIGludCBub2RlLCBpbnQgbCwgaW50IHIpewogICAgICAgIGlmKGw9PXIpeyBzdFtub2RlXT12OyByZXR1cm47IH0KICAgICAgICBpbnQgbT0obCtyKT4+MTsKICAgICAgICBpZihwPD1tKSB1cGQocCx2LG5vZGU8PDEsbCxtKTsKICAgICAgICBlbHNlICAgICB1cGQocCx2LG5vZGU8PDF8MSxtKzEscik7CiAgICAgICAgc3Rbbm9kZV09bWF4KHN0W25vZGU8PDFdLCBzdFtub2RlPDwxfDFdKTsKICAgIH0KICAgIHZvaWQgdXBkYXRlKGludCBwLCBpbnQgdil7IGlmKG4pIHVwZChwLHYsMSwwLG4tMSk7IH0KICAgIGludCBxcnkoaW50IHFsLCBpbnQgcXIsIGludCBub2RlLCBpbnQgbCwgaW50IHIpewogICAgICAgIGlmKHFyPGwgfHwgcjxxbCkgcmV0dXJuIDA7CiAgICAgICAgaWYocWw8PWwgJiYgcjw9cXIpIHJldHVybiBzdFtub2RlXTsKICAgICAgICBpbnQgbT0obCtyKT4+MTsKICAgICAgICByZXR1cm4gbWF4KHFyeShxbCxxcixub2RlPDwxLGwsbSksIHFyeShxbCxxcixub2RlPDwxfDEsbSsxLHIpKTsKICAgIH0KICAgIGludCBxdWVyeShpbnQgbCwgaW50IHIpeyBpZihsPnIgfHwgIW4pIHJldHVybiAwOyByZXR1cm4gcXJ5KGwsciwxLDAsbi0xKTsgfQp9OwoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICAKICAgIGludCBOLCBEOwogICAgY2luID4+IE4gPj4gRDsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IEEoTik7CiAgICBmb3IoaW50IGk9MDtpPE47aSsrKSBjaW4gPj4gQVtpXTsKCiAgICAvLyDsooztkZzslZXstpUKICAgIHZlY3Rvcjxsb25nIGxvbmc+IHZhbHMgPSBBOwogICAgc29ydCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCkpOwogICAgdmFscy5lcmFzZSh1bmlxdWUodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpKSwgdmFscy5lbmQoKSk7CiAgICBpbnQgTSA9IChpbnQpdmFscy5zaXplKCk7CiAgICB2ZWN0b3I8aW50PiByayhOKTsKICAgIGZvcihpbnQgaT0wO2k8TjtpKyspewogICAgICAgIHJrW2ldID0gaW50KGxvd2VyX2JvdW5kKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSwgQVtpXSkgLSB2YWxzLmJlZ2luKCkpOyAvLyAwLi5NLTEKICAgIH0KCiAgICB2ZWN0b3I8aW50PiBkcChOLCAwKTsKCiAgICAvLyDqsIEg6rCSIOuTseq4ieuzhOuhnCAi7Jyg7ZqoIOq1rOqwhCDslYjsl5DshJzsnZggZHAg7LWc64yA6rCSIuydhCDsnKDsp4AKICAgIHZlY3RvcjxkZXF1ZTxwYWlyPGludCxpbnQ+Pj4gYnVja2V0KE0pOwogICAgU2VnVHJlZSBzZWcoTSk7CgogICAgZm9yKGludCBpPTA7aTxOO2krKyl7CiAgICAgICAgLy8g7JyI64+E7Jqw7JeQ7IScIOuyl+yWtOuCmOuKlCDsnbjrjbHsiqQg7KCc6rGwIChpLUQtMSkKICAgICAgICBpbnQgb3V0ID0gaSAtIEQgLSAxOwogICAgICAgIGlmKG91dCA+PSAwKXsKICAgICAgICAgICAgaW50IHIgPSBya1tvdXRdOwogICAgICAgICAgICBpZighYnVja2V0W3JdLmVtcHR5KCkgJiYgYnVja2V0W3JdLmZyb250KCkuZmlyc3QgPT0gb3V0KXsKICAgICAgICAgICAgICAgIGJ1Y2tldFtyXS5wb3BfZnJvbnQoKTsKICAgICAgICAgICAgICAgIHNlZy51cGRhdGUociwgYnVja2V0W3JdLmVtcHR5KCkgPyAwIDogYnVja2V0W3JdLmZyb250KCkuc2Vjb25kKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gZHBbaV0gPSAxICsgbWF4IGRwW2pdLCAoauKIiFtpLUQsaS0xXSwgQVtqXSA8IEFbaV0pCiAgICAgICAgaW50IGJlc3RMZXNzID0gKHJrW2ldID4gMCkgPyBzZWcucXVlcnkoMCwgcmtbaV0tMSkgOiAwOwogICAgICAgIGRwW2ldID0gYmVzdExlc3MgKyAxOwoKICAgICAgICAvLyDtmITsnqwg6rCSIOyCveyehQogICAgICAgIGludCByID0gcmtbaV07CiAgICAgICAgYXV0byAmZHEgPSBidWNrZXRbcl07CiAgICAgICAgd2hpbGUoIWRxLmVtcHR5KCkgJiYgZHEuYmFjaygpLnNlY29uZCA8PSBkcFtpXSkgZHEucG9wX2JhY2soKTsKICAgICAgICBkcS5lbXBsYWNlX2JhY2soaSwgZHBbaV0pOwogICAgICAgIHNlZy51cGRhdGUociwgZHEuZnJvbnQoKS5zZWNvbmQpOwogICAgfQoKICAgIGNvdXQgPDwgZHBbTi0xXSA8PCAiXG4iOyAvLyDrsJjrk5zsi5wg66eI7KeA66eJIOuCoCDtj6ztlagKICAgIHJldHVybiAwOwp9