1 #include<cstdio>
2 #include<cstring>
3 #include<cmath>
4 #include <cstdlib>
5 #define MAXN 100001
6 using namespace std;
7
8 const int mod=99991;
9 int sum[MAXN][30];
10 int f[MAXN][30];
11 int c[MAXN][30];
12 int n,k,len;
13 struct node
14 {
15 int xx;
16 node *next;
17 };
18 node *hash[mod];
19
20 bool cmp(int a,int b)
21 {
22 for(int j=0; j<k; j++)
23 if(c[a][j]!=c[b][j])
24 return false;
25 return true;
26 }
27
28 void insert(int x)
29 {
30 int key=0;
31 for(int j=1; j<k; j++)
32 {
33 key+=c[x][j]*j;
34 }
35 key=abs(key)%mod;
36 if(!hash[key])
37 {
38 node *p1=new node();
39 p1->xx=x;
40 hash[key]=p1;
41 }
42 else
43 {
44 node *p=hash[key];
45 if(cmp(p->xx,x))
46 {
47 int d=x-(p->xx);
48 if(len<d)
49 len=d;
50 return;
51 }
52 else
53 {
54 while(p->next)
55 {
56 if(cmp(p->next->xx,x))
57 {
58 int dd=x-(p->next->xx);
59 if(dd>len)
60 len=dd;
61 return;
62 }
63 p=p->next;
64 }
65 node *pp=new node();
66 pp->xx=x;
67 p->next=pp;
68 }
69 }
70 return ;
71 }
72
73 void inti()
74 {
75 for(int i=0; i<k; i++)
76 {
77 c[0][i]=0;
78 sum[0][i]=0;
79 }
80 for(int i=0; i<mod; i++)
81 hash[i]=NULL;
82 }
83
84 int main()
85 {
86 while(scanf("%d%d",&n,&k)!=EOF)
87 {
88 inti();
89 insert(0);
90 len=0;
91 int m;
92 for(int i=1; i<=n; i++)
93 {
94 scanf("%d",&m);
95 for(int j=0; j<k; j++)
96 {
97 f[i][j]=m%2;
98 m/=2;
99 sum[i][j]=sum[i-1][j]+f[i][j];
100 c[i][j]=sum[i][j]-sum[i][0];
101 }
102 insert(i);
103 }
104 printf("%d\n",len);
105 }
106 return 0;
107 }