#include <bits/stdc++.h>
using namespace std;
inline int gc() {
  static const int BUF = 1e7;
  static char buf[BUF], *bg = buf + BUF, *ed = bg;
  if (bg == ed) fread(bg = buf, 1, BUF, stdin);
  return *bg++;
}
inline int ri() {
  int x = 0, f = 1, c = gc();
  for (; c < 48 || c > 57; f = c == '-' ? -1 : f, c = gc())
    ;
  for (; c > 47 && c < 58; x = x * 10 + c - 48, c = gc())
    ;
  return x * f;
}
const int inf = 1e9 + 9;
const long long mod = 1e9 + 7;
const int maxN = 1e5 + 7;
int n;
int s[maxN];
int ans[maxN];
int main() {
  while (cin >> n) {
    int max_1 = -1, min_1 = inf, highBit = 0;
    int ans = -1;
    for (int i = (1); i <= (n); ++i) {
      cin >> s[i];
      highBit |= s[i];
      max_1 = max(max_1, s[i]);
      min_1 = min(min_1, s[i]);
    }
    while (highBit & ~((highBit) & (-highBit)))
      highBit &= ~((highBit) & (-highBit));
    while (!((max_1 & highBit) ^ (min_1 & highBit))) {
      max_1 &= ~highBit;
      min_1 &= ~highBit;
      highBit >>= 1;
    }
    for (int i = (1); i <= (n); ++i) {
      if (s[i] & highBit) {
        int tmp_max = -1;
        for (int j = (i + 1); j <= (n); ++j) {
          if (s[j] & highBit) {
            i = j - 1;
            break;
          }
          tmp_max = max(tmp_max, s[j]);
          ans = max(ans, tmp_max ^ s[i]);
        }
      }
    }
    for (int i = (n); i >= (1); --i) {
      if (s[i] & highBit) {
        int tmp_max = -1;
        for (int j = (i - 1); j >= (1); --j) {
          if (s[j] & highBit) {
            i = j + 1;
            break;
          }
          tmp_max = max(tmp_max, s[j]);
          ans = max(ans, tmp_max ^ s[i]);
        }
      }
    }
    cout << ans << endl;
  }
  return 0;
}

### Prompt

Create a solution in CPP for the following problem:

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}.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
inline int gc() {
  static const int BUF = 1e7;
  static char buf[BUF], *bg = buf + BUF, *ed = bg;
  if (bg == ed) fread(bg = buf, 1, BUF, stdin);
  return *bg++;
}
inline int ri() {
  int x = 0, f = 1, c = gc();
  for (; c < 48 || c > 57; f = c == '-' ? -1 : f, c = gc())
    ;
  for (; c > 47 && c < 58; x = x * 10 + c - 48, c = gc())
    ;
  return x * f;
}
const int inf = 1e9 + 9;
const long long mod = 1e9 + 7;
const int maxN = 1e5 + 7;
int n;
int s[maxN];
int ans[maxN];
int main() {
  while (cin >> n) {
    int max_1 = -1, min_1 = inf, highBit = 0;
    int ans = -1;
    for (int i = (1); i <= (n); ++i) {
      cin >> s[i];
      highBit |= s[i];
      max_1 = max(max_1, s[i]);
      min_1 = min(min_1, s[i]);
    }
    while (highBit & ~((highBit) & (-highBit)))
      highBit &= ~((highBit) & (-highBit));
    while (!((max_1 & highBit) ^ (min_1 & highBit))) {
      max_1 &= ~highBit;
      min_1 &= ~highBit;
      highBit >>= 1;
    }
    for (int i = (1); i <= (n); ++i) {
      if (s[i] & highBit) {
        int tmp_max = -1;
        for (int j = (i + 1); j <= (n); ++j) {
          if (s[j] & highBit) {
            i = j - 1;
            break;
          }
          tmp_max = max(tmp_max, s[j]);
          ans = max(ans, tmp_max ^ s[i]);
        }
      }
    }
    for (int i = (n); i >= (1); --i) {
      if (s[i] & highBit) {
        int tmp_max = -1;
        for (int j = (i - 1); j >= (1); --j) {
          if (s[j] & highBit) {
            i = j + 1;
            break;
          }
          tmp_max = max(tmp_max, s[j]);
          ans = max(ans, tmp_max ^ s[i]);
        }
      }
    }
    cout << ans << endl;
  }
  return 0;
}

```