#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,M=1e6+5;
int f[N][3];
int a[N],n,ans=0,k,maxs;
int b[N],c[N];
int sz[M][3];//树状数组
int lowbit(int x)
{
return x&(-x);
}
int da(int x,int t)
{
int p=0;
for(;x;x-=lowbit(x)) p=max(p,sz[x][t]);
return p;
}
void gai(int x,int y,int t)
{
for(int i=x;i<M;i+=lowbit(i))
sz[i][t]=max(sz[i][t],y);
}
int main()
{
cin>>n>>k; a[n+1]=M;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
{
int o=da(a[i],1)+1;
b[i]=o;
gai(a[i],o,1);
}
for(int i=n;i>=1;i--)
{
int o=da(M-a[i],2)+1;
c[i]=o;
gai(M-a[i],o,2);
}
//for(int i=1;i<=n;i++) cout<<b[i]<<' '<<c[i]<<'\n';
for(int i=0,j=i+k+1;j<=n+1;i++,j++)
{
if(a[i]<=a[j])
ans=max(ans,b[i]+c[j]+k);
}
cout<<ans;
return 0;
}
/*
7 2
11 45 99 19 19 88 100
4 2
5 3 2 4
*/
80
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,M=1e6+5;
int dp[N][4];//dp[i][0]没使用过技能最长序列
//dp[i][1]使用过技能最长序列
int a[N],n,ans,k,b[N],maxs;
int sz[M][3];//树状数组
int lowbit(int x)
{
return x&(-x);
}
int da(int x,int t)
{
int p=0;
for(;x;x-=lowbit(x)) p=max(p,sz[x][t]);
return p;
}
void gai(int x,int y,int t)
{
for(int i=x;i<=maxs;i+=lowbit(i))
{
sz[i][t]=max(sz[i][t],y);
}
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i],maxs=max(maxs,a[i]);
for(int i=1;i<=n;i++)
{
dp[i][0]=dp[i][1]=1;
gai(a[i],1,0);
gai(a[i],1,1);
int o=da(a[i],0),
p=da(a[i],1);
dp[i][0]=o+1;
dp[i][1]=p+1;
if(i-k>=1&&a[i-k]<=a[i])
dp[i][1]=max(dp[i][1],dp[i-k][0]+k);
gai(a[i],dp[i][1],1);
gai(a[i],dp[i][0],0);
ans=max(max(dp[i][1],dp[i][0]),ans);
}
cout<<ans;
return 0;
}
/*
7 2
11 45 99 19 19 88 100
*/