#include
#include
#include
#define MN 200003
using namespace std;
int n,m;
int s[MN],a[MN];
int v[MN],sa[MN],q[MN],rank[MN],h[MN],mmh=0;
bool w[101];
inline void gr(int x){
rank[sa[1]]=1;
for (int i=2;i<=n;i++) rank[sa[i]]=(s[sa[i]]==s[sa[i-1]]&&s[sa[i]+x]==s[sa[i-1]+x])?rank[sa[i-1]]:rank[sa[i-1]]+1;
for (int i=1;i<=n;i++) s[i]=rank[i];
}
inline void gv(){memset(v,0,sizeof(v));for (int i=1;i<=n;i++) v[s[i]]++;for (int i=1;i<=2e5;i++)v[i]+=v[i-1];}
inline void gsa(){
gv();for (int i=n;i>=1;i--) sa[v[s[i]]--]=i;gr(0);
for (int i=1;i1){
gv();for (int j=n;j>=1;j--) if (sa[j]>i) q[v[s[sa[j]-i]]--]=sa[j]-i;
for (int j=n-i+1;j<=n;j++) q[v[s[j]]--]=j;
for (int j=1;j<=n;j++) sa[j]=q[j];gr(i);
if (rank[sa[n]]==n) return;
}
}
inline void gh(){for (int i=1,k=0,j;i<=n;h[rank[i++]]=k) for (k?k--:0,j=sa[rank[i]-1];a[i+k]==a[j+k]&&i+k<=n&&j+k<=n;k++);}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&a[i]),s[i]=a[i];
gsa();gh();
int l=0,r=n,mid,i,j,k,mmh;
while(l<r){
mid=(l+r+1)>>1;
for (i=1,j,k=2;i<=n;i=k++){
memset(w,0,sizeof(w));
while (h[k]>=mid&&k<=n) k++;
if (k-i>=m) break;
}
if (i<=n) l=mid;else r=mid-1;
}
printf("%d\n",l);
}