#include <bits/stdc++.h>
using namespace std;
inline pair<int, int> merge(pair<int, int> x, pair<int, int> y) {
  int u = max(x.first, y.first), v = max(x.second, y.second);
  if (x.first < u) v = max(x.first, v);
  if (y.first < u) v = max(y.first, v);
  return pair<int, int>(u, v);
}
pair<int, int> a[1 << 21];
void fwt1(int len) {
  for (int i = 1; i < len; i <<= 1)
    for (int j = 0; j < len; j++)
      if (j & i) a[j ^ i] = merge(a[j ^ i], a[j]);
}
int b[1 << 21];
void fwt2(int len) {
  for (int i = 1; i < len; i <<= 1)
    for (int j = 0; j < len; j++)
      if (j & i) b[j ^ i] = max(b[j ^ i], b[j]);
}
int num[1000005];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &num[i]);
    a[num[i]] = merge(a[num[i]], pair<int, int>(i, 0));
  }
  fwt1(1 << 21);
  for (int i = 0; i < (1 << 21); i++) b[i] = a[i].second;
  int ans = 0;
  for (int i = 1; i < n - 1; i++) {
    int s = num[i];
    for (int j = 20; j >= 0; j--)
      if (!((s >> j) & 1) && b[s ^ num[i] ^ (1 << j)] > i) s ^= (1 << j);
    ans = max(ans, s);
  }
  printf("%d\n", ans);
  return 0;
}
