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}.
#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 2;
const long long N1 = 1e2 + 2;
const long long mod = 1e9 + 7;
const int MASK = 1 << 17 + 1;
const int who = 6 * N * log2(N);
long long power(long long a, long long b, long long c) {
  long long ret = 1;
  while (b) {
    if (b % 2 == 1) {
      ret = (ret * a) % c;
    }
    b /= 2;
    a = (a * a) % c;
  }
  return ret;
}
double power(double a, long long b) {
  double ret = 1;
  while (b) {
    if (b % 2 == 1) {
      ret = (ret * a);
    }
    b /= 2;
    a = (a * a);
  }
  return ret;
}
int a[N + 3];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  stack<int> st;
  int max1 = a[0] ^ a[1];
  st.push(a[0]);
  st.push(a[1]);
  for (int i = 2; i < n; i++) {
    while (!st.empty() && st.top() < a[i]) {
      max1 = max(max1, a[i] ^ st.top());
      st.pop();
    }
    st.push(a[i]);
    if (st.size() >= 2) {
      int tm = st.top();
      st.pop();
      max1 = max(max1, st.top() ^ tm);
      st.push(tm);
    }
  }
  cout << max1 << "\n";
}
