Bike loves looking for the second maximum element in the sequence. The second maximum element in the sequence of distinct numbers x1, x2, ..., xk (k > 1) is such maximum element xj, that the following inequality holds: <image>.

The lucky number of the sequence of distinct positive integers x1, x2, ..., xk (k > 1) is the number that is equal to the bitwise excluding OR of the maximum element of the sequence and the second maximum element of the sequence.

You've got a sequence of distinct positive integers s1, s2, ..., sn (n > 1). Let's denote sequence sl, sl + 1, ..., sr as s[l..r] (1 ≤ l < r ≤ n). Your task is to find the maximum number among all lucky numbers of sequences s[l..r].

Note that as all numbers in sequence s are distinct, all the given definitions make sence.

Input

The first line contains integer n (1 < n ≤ 105). The second line contains n distinct integers s1, s2, ..., sn (1 ≤ si ≤ 109).

Output

Print a single integer — the maximum lucky number among all lucky numbers of sequences s[l..r].

Examples

Input

5
5 2 1 4 3


Output

7


Input

5
9 8 3 5 7


Output

15

Note

For the first sample you can choose s[4..5] = {4, 3} and its lucky number is (4 xor 3) = 7. You can also choose s[1..2].

For the second sample you must choose s[2..5] = {8, 3, 5, 7}.
import java.util.Scanner;
import java.util.Stack;

public class Xor2 {

    public static long max(long[] nums, int n) {
        Stack<Long> stack = new Stack<Long>();
        long result = 0;
        for (int i = 0; i < n; i++) {
            long num = nums[i];
            while (stack.size() > 0) {
                long top = stack.peek();
                if (top >= num) {
                    break;
                }
                stack.pop();
                if(stack.size() > 0){
                    long p = stack.peek();
                    long xor2 = p ^ top;
                    if(xor2 > result)
                        result = xor2;
                }
                long xor = top ^ num;
                if (xor > result)
                    result = xor;
            }
            stack.push(num);
        }
        
        for(int i = 0 ; i < stack.size() - 1 ; i ++){
            long a = stack.get(i);
            long b = stack.get(i + 1);
            long xor = a ^ b;
            if(xor > result)
                result = xor;
        }
        return result;
    }
    
    public static long bf(long[] nums, int n){
        long result = 0;
        for(int i = 0 ; i < n ; i ++){
            for(int j = i + 1 ; j < n ; j ++){
                long a = 0 , b = 0;
                for(int k = i ; k <= j ; k ++){
                    if(nums[k] > a){
                        b = a;
                        a = nums[k];
                    }else if(nums[k] > b){
                        b = nums[k];
                    }
                }
                long xor = a ^ b;
                if(xor > result)
                    result = xor;
            }
        }
        return result;
    }

    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        long[] nums = new long[n];
        for (int i = 0; i < n; i++) {
            nums[i] = s.nextLong();
        }
        long result = max(nums, n);
        System.out.println(result);

        /*for(int x = 0 ; x < 100 ; x ++){
            System.out.println(x);
            Random r = new Random();
            int n = 1000;
            long[] nums = new long[n];
            for(int i = 0 ; i < n ; i ++){
                nums[i] = Math.abs(r.nextLong());
            }
            long a = max(nums , n);
            long b = bf(nums , n);
            if(a != b){
                System.out.println(a + "\t" + b);
                for(int i = 0 ; i < n ; i ++){
                    System.out.println(nums[i]);
                }
                System.exit(0);
            }
        }*/
    }
}
