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;
bool ne(const deque<int> &v, int a, int b) {
  deque<int>::const_iterator it = lower_bound((v).begin(), (v).end(), a);
  return it != v.end() && *it <= b;
}
int comp(const vector<int> &p) {
  int res = 0;
  deque<int> S;
  for (__typeof((p).begin()) it = (p).begin(); it != (p).end(); ++it) {
    int t = 0, xt = 0;
    for (int i = 30; i >= 0; --i) {
      int tmp;
      if (*it & (1 << i)) {
        tmp = xt;
        xt = xt + (1 << i);
      } else {
        tmp = xt + (1 << i);
      }
      if (ne(S, tmp, min(tmp + (1 << i) - 1, *it))) {
        t |= (1 << i);
        xt = tmp;
      }
    }
    res = max(res, t);
    while (!S.empty() && S.front() <= *it) {
      S.pop_front();
    }
    S.push_front(*it);
  }
  return res;
}
int main(void) {
  int n;
  scanf("%d", &n);
  vector<int> s(n);
  for (int i = 0; i < (n); ++i) {
    scanf("%d", &s[i]);
  }
  int res = comp(s);
  reverse((s).begin(), (s).end());
  res = max(res, comp(s));
  printf("%d\n", res);
  return 0;
}
