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 int INF = ((1 << 31) - 1);
const long long LLINF = (((1LL << 63) - 1LL));
const double eps = 1e-9;
const double PI = 3.14159265358979323846;
template <class T, class S>
ostream& operator<<(ostream& out, const pair<T, S>& p) {
  out << "(" << p.first << ", " << p.second << ")";
  return out;
}
template <class T>
ostream& operator<<(ostream& out, const vector<T>& v) {
  out << "[";
  for (int i = 0; i < v.size(); ++i) {
    if (i) out << ", ";
    out << v[i];
  };
  out << "]";
  return out;
}
int solve(vector<int> seq) {
  int bit;
  for (bit = 1 << 30; bit > 0; bit /= 2) {
    bool f = 0;
    for (int i = 0; i + 1 < seq.size(); ++i) {
      if ((seq[i] & bit) != (seq[i + 1] & bit)) {
        f = 1;
      }
    }
    if (!f) {
      for (int i = 0; i < seq.size(); ++i) {
        seq[i] ^= bit;
      };
    } else {
      break;
    }
  }
  if (bit == 0) return -1;
  int i = 0;
  while (!(seq[i] & bit)) ++i;
  int res = 0;
  while (i < seq.size()) {
    int last;
    while (i < seq.size() && (seq[i] & bit)) {
      last = seq[i];
      ++i;
    }
    if (i < seq.size()) {
      int M = 0;
      while (i < seq.size() && 0 == (seq[i] & bit)) {
        M = max(M, seq[i]);
        res = max(res, last ^ M);
        ++i;
      }
    }
  }
  return res;
}
int main(int argc, const char* argv[]) {
  int n;
  cin >> n;
  vector<int> seq(n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &seq[i]);
  }
  vector<int> rseq(seq);
  reverse((rseq).begin(), (rseq).end());
  cout << max(solve(seq), solve(rseq));
  return 0;
}
