#include<cstdio>
#include<algorithm>
using namespace std;
int max(int x,int y){return x>y?x:y;}
const int N=5e4+5,inf=0x3f3f3f3f;
int n,ans,tot,pre[N],nxt[N];
int a[N],rt[N*400],siz[N*400],ch[N*400][2];
pair<int,int> b[N];
void add(int x,int &k,int i,int p){
siz[k=++tot]=siz[x]+1;
int d=(p>>i)&1;
ch[k][d^1]=ch[x][d^1];
ch[k][d]=ch[x][d];
if(i<0) return ;
add(ch[x][d],ch[k][d],i-1,p);
}
int query(int l,int r,int i,int p){
if(i<0) return 0;
int d=(p>>i)&1;
int s=siz[ch[r][d^1]]-siz[ch[l][d^1]];
if(s)
return query(ch[l][d^1],ch[r][d^1],i-1,p)|(1<<i);
else
return query(ch[l][d],ch[r][d],i-1,p);
}
int main(){
scanf("%d",&n);
nxt[0]=1,pre[n+1]=n;
for(int i=1;i<=n;i=-~i){
scanf("%d",a+i);
pre[i]=i-1,nxt[i]=i+1;
b[i]=make_pair(a[i],i);
add(rt[i-1],rt[i],32,a[i]);
}
sort(b+1,b+n+1);
for(int i=1;i<=n;i=-~i){
int x=b[i].second;
int l1=pre[x ],r1=nxt[x ];
int l2=pre[l1],r2=nxt[r1];
nxt[l1]=r1,pre[r1]=l1;
// if(l1>=1)
ans=max(ans,query(rt[l2+1-1],rt[r1-1],32,a[x]));
// if(r1<=n)
ans=max(ans,query(rt[l1+1-1],rt[r2-1],32,a[x]));
}
printf("%d",ans);
return 0;
}