#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
}
// 각 값등급별로 창 내 dp의 최대를 유지하는 deque
vector<deque<pair<int,int>>> bucket(M);
SegTree seg(M);
vector<int> dp(N, 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);
}
}
// dp[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+IHZhbHMgPSBBOwogICAgc29ydCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCkpOwogICAgdmFscy5lcmFzZSh1bmlxdWUodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpKSwgdmFscy5lbmQoKSk7CiAgICBpbnQgTSA9IChpbnQpdmFscy5zaXplKCk7CiAgICB2ZWN0b3I8aW50PiByayhOKTsKICAgIGZvcihpbnQgaT0wO2k8TjtpKyspewogICAgICAgIHJrW2ldID0gaW50KGxvd2VyX2JvdW5kKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSwgQVtpXSkgLSB2YWxzLmJlZ2luKCkpOyAvLyAwLi5NLTEKICAgIH0KCiAgICAvLyDqsIEg6rCS65Ox6riJ67OE66GcIOywvSDrgrQgZHDsnZgg7LWc64yA66W8IOycoOyngO2VmOuKlCBkZXF1ZQogICAgdmVjdG9yPGRlcXVlPHBhaXI8aW50LGludD4+PiBidWNrZXQoTSk7CiAgICBTZWdUcmVlIHNlZyhNKTsKCiAgICB2ZWN0b3I8aW50PiBkcChOLCAwKTsKCiAgICBmb3IoaW50IGk9MDtpPE47aSsrKXsKICAgICAgICAvLyDssL3sl5DshJwg67mg7KC464KY6rCA64qUIOyduOuNseyKpCAoaS1ELTEpIOygnOqxsAogICAgICAgIGludCBvdXQgPSBpIC0gRCAtIDE7CiAgICAgICAgaWYob3V0ID49IDApewogICAgICAgICAgICBpbnQgciA9IHJrW291dF07CiAgICAgICAgICAgIGlmKCFidWNrZXRbcl0uZW1wdHkoKSAmJiBidWNrZXRbcl0uZnJvbnQoKS5maXJzdCA9PSBvdXQpewogICAgICAgICAgICAgICAgYnVja2V0W3JdLnBvcF9mcm9udCgpOwogICAgICAgICAgICAgICAgc2VnLnVwZGF0ZShyLCBidWNrZXRbcl0uZW1wdHkoKSA/IDAgOiBidWNrZXRbcl0uZnJvbnQoKS5zZWNvbmQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBkcFtpXSDqs4TsgrAKICAgICAgICBpbnQgYmVzdExlc3MgPSAocmtbaV0gPiAwKSA/IHNlZy5xdWVyeSgwLCBya1tpXS0xKSA6IDA7CiAgICAgICAgZHBbaV0gPSBiZXN0TGVzcyArIDE7CgogICAgICAgIC8vIO2YhOyerCDqsJLrk7HquInsl5Ag7IK97J6FCiAgICAgICAgaW50IHIgPSBya1tpXTsKICAgICAgICBhdXRvICZkcSA9IGJ1Y2tldFtyXTsKICAgICAgICB3aGlsZSghZHEuZW1wdHkoKSAmJiBkcS5iYWNrKCkuc2Vjb25kIDw9IGRwW2ldKSBkcS5wb3BfYmFjaygpOwogICAgICAgIGRxLmVtcGxhY2VfYmFjayhpLCBkcFtpXSk7CiAgICAgICAgc2VnLnVwZGF0ZShyLCBkcS5mcm9udCgpLnNlY29uZCk7CiAgICB9CgogICAgY291dCA8PCBkcFtOLTFdIDw8ICJcbiI7IC8vIOuwmOuTnOyLnCDrp4jsp4Drp4kg64KgIO2PrO2VqAogICAgcmV0dXJuIDA7Cn0=