#include <bits/stdc++.h>
using namespace std;
#define MAXN 1001000
int arr[MAXN];
int px[MAXN];
#define MAXID (MAXN*21)
int trie[MAXID][2];
int mx[MAXID];
int id=0;
void insert(int nd, int v, int i) {
for(int j=19;j>=0;j--) {
int cur=(v>>j)&1;
if(trie[nd][cur]<0) {
trie[nd][cur]=++id;
mx[id]=i;
}
nd=trie[nd][cur];
}
}
void merge(int a, int b) {
for(int i=0;i<2;i++) {
if(trie[b][i]<0) continue;
if(trie[a][i]<0) {
trie[a][i]=trie[b][i];
} else merge(trie[a][i], trie[b][i]);
}
}
int search(int nd, int vx, int vmx) {
int ans=0;
for(int j=19;j>=0;j--) {
int cur=(vmx>>j)&1;
int cx=(vx>>j)&1;
if(cur==1&&trie[nd][cx]>=0) {
ans=max(ans, mx[trie[nd][cx]]);
}
cur^=cx;
if(trie[nd][cur]<0) {
return ans;
}
nd=trie[nd][cur];
}
return ans;
}
int32_t main() {
memset(trie, 0xff, sizeof(trie));
cin.tie(nullptr);
ios::sync_with_stdio(false);
int n;
cin >> n;
for(int i=1;i<=n;i++) cin >> arr[i];
px[0]=0;
for(int i=1;i<=n;i++) px[i]=px[i-1]^arr[i];
vector<pair<int, int>> vc;
vector<pair<int, int>> nvc;
int ans=0;
for(int i=n;i>=1;i--) {
vc.push_back({(1<<20)-1, ++id});
insert(id, px[i], i);
nvc.clear();
for(auto pr : vc) {
pr.first&=arr[i];
if(nvc.empty()||nvc.back().first!=pr.first) {
nvc.push_back(pr);
} else {
merge(nvc.back().second, pr.second);
}
}
vc=nvc;
for(auto pr : vc) {
int mxi=search(pr.second, px[i-1], pr.first);
if(mxi) {
ans=max(ans, mxi-i+1);
break;
}
}
}
cout << ans << endl;
return 0;
}