#include<cstdio>
#include<cstring>
#include<cmath>
#include <cstdlib>
#define MAXN 100001
using namespace std; const int mod=;
int sum[MAXN][];
int f[MAXN][];
int c[MAXN][];
int n,k,len;
struct node
{
int xx;
node *next;
};
node *hash[mod]; bool cmp(int a,int b)
{
for(int j=; j<k; j++)
if(c[a][j]!=c[b][j])
return false;
return true;
} void insert(int x)
{
int key=;
for(int j=; j<k; j++)
{
key+=c[x][j]*j;
}
key=abs(key)%mod;
if(!hash[key])
{
node *p1=new node();
p1->xx=x;
hash[key]=p1;
}
else
{
node *p=hash[key];
if(cmp(p->xx,x))
{
int d=x-(p->xx);
if(len<d)
len=d;
return;
}
else
{
while(p->next)
{
if(cmp(p->next->xx,x))
{
int dd=x-(p->next->xx);
if(dd>len)
len=dd;
return;
}
p=p->next;
}
node *pp=new node();
pp->xx=x;
p->next=pp;
}
}
return ;
} void inti()
{
for(int i=; i<k; i++)
{
c[][i]=;
sum[][i]=;
}
for(int i=; i<mod; i++)
hash[i]=NULL;
} int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
inti();
insert();
len=;
int m;
for(int i=; i<=n; i++)
{
scanf("%d",&m);
for(int j=; j<k; j++)
{
f[i][j]=m%;
m/=;
sum[i][j]=sum[i-][j]+f[i][j];
c[i][j]=sum[i][j]-sum[i][];
}
insert(i);
}
printf("%d\n",len);
}
return ;
}