#include<iostream>
#include<math.h>
#include<climits>
using namespace std;
class trienode{
public:
    trienode *left;//store 0
    trienode *right;//store 1
};
void Insert(int element, trienode *root){
    trienode *curr = root;
    for(int i=0;i<32;i++){
        //find the current bit(1 or 0)
        int bit = (element>>i) & 1;
        if(bit == 0){
            if(curr->left == NULL){
                //make left child
                curr->left = new trienode();
            }
            curr = curr->left;
        }
        else{
            if(curr->right == NULL){
                //make right child
                curr->right = new trienode();
            }
            curr = curr->right;
        }
    }
}

int findMaxXorPair(trienode *root, int arr[] ,int n, int ele){
    int max_xor = INT_MIN;
    trienode *curr = root;
    int value = ele;
    int curr_xor = 0;
    for(int j=0;j<32;j++){
        int b = (value >> j) & 1;
        if(b == 0){
            //current bit is 0 and searching fr 1 for max xor value
            if(curr->right != NULL){
                curr = curr->right;
                curr_xor += (int)pow(2,j);
            }
            else{
                curr = curr->left;
            }
        }
        else{
            //current bit is 1 and searching fr 0 for max xor value
            if(curr->left != NULL){
                curr = curr->left;
                curr_xor += (int)pow(2,j);
            }
            else{
                curr = curr->right;
            }
        }
    }
    if(curr_xor>max_xor){
        max_xor = curr_xor;
    }
    return max_xor;
}

int main(){
    int n;
    cin>>n;
    int arr[n];
    for(int i = 0;i < n;i++){
        cin>>arr[i];
    }
    trienode *root = new trienode();
    int result = INT_MIN;
    for(int i=0;i<n;i++){
        Insert(arr[i],root);
        int x = findMaxXorPair(root,arr,n,arr[i]);
        if(x>result){
            result = x;
        }

    }
    cout<<result<<endl;
return 0;}
