记录
#include<bits/stdc++.h>
using namespace std;
int n,a[50005],b[50005],to[50005],lst[50005],nxt[50005],ans;
int root[50005],sn[5000005][2],mx[5000005],rest;
void insert(int id,int bit,int p,int q){
if(bit<0){mx[q]=id;return ;}
bool x=(a[id]>>bit)&1;
sn[q][0]=sn[p][0],sn[q][1]=sn[p][1],sn[q][x]=++rest;
insert(id,bit-1,sn[p][x],sn[q][x]);
mx[q]=max(mx[sn[q][0]],mx[sn[q][1]]);
return ;
}
int main(){
scanf("%d",&n);
memset(mx,-1,sizeof(mx));
for(int i=1;i<=n;i++){
scanf("%d",&a[i]),b[i]=a[i],root[i]=++rest;
insert(i,30,root[i-1],root[i]);
}
sort(b+1,b+n+1);
nxt[0]=1,lst[n+1]=n;
for(int i=1;i<=n;i++)to[lower_bound(b+1,b+n+1,a[i])-b]=i,lst[i]=i-1,nxt[i]=i+1;
for(int i=1;i<n;i++){
int res=0;
for(int bit=30,cur=root[min(n,nxt[to[i]])];~bit;bit--){
bool x=(a[to[i]]>>bit)&1;res<<=1;
if(mx[sn[cur][!x]]>=lst[to[i]])res|=1,cur=sn[cur][!x];
else cur=sn[cur][x];
}
ans=max(ans,res);
nxt[lst[to[i]]]=nxt[to[i]],lst[nxt[to[i]]]=lst[to[i]];
}
printf("%d",ans);
return 0;
}