#include <bits/stdc++.h>
using namespace std;
long long max_vrednost(const vector<int> &a, const vector<int> &b) {
  int n = a.size();
  vector<int> prefiks_xor(n + 1, 0);
  for (int i = 0; i < n; i++) {
    prefiks_xor[i + 1] = prefiks_xor[i] ^ a[i];
  }
  // koji kuraaaaaaaaaaaaaaaaaaaaaaaaaaac
  long long maxv = 0;
  stack<int> s;
  vector<int> left(n, -1), right(n, n);

  for (int i = 0; i < n; i++) {
    while (!s.empty() && b[s.top()] >= b[i])
      s.pop();
    if (!s.empty())
      left[i] = s.top();
    s.push(i);
  }
  // ubicu seeeee
  while (!s.empty())
    s.pop();
  // i use parrot os and neovim btw
  for (int i = n - 1; i >= 0; i--) {
    while (!s.empty() && b[s.top()] > b[i])
      s.pop();
    if (!s.empty())
      right[i] = s.top();
    s.push(i);
  }
  for (int i = 0; i < n; i++) {
    int l = left[i] + 1;
    int r = right[i] - 1;
    for (int j = i; j <= r; j++) {
      long long xorv = prefiks_xor[j + 1] ^ prefiks_xor[i];
      long long andv = b[i];
      maxv = max(maxv, xorv * andv);
    }
  }
  // shitty ass code u sranje vremenu
  return maxv;
}

int main() {
  int n;
  cin >> n;
  vector<int> a(n), b(n);
  for (int i = 0; i < n; i++)
    cin >> a[i];
  for (int i = 0; i < n; i++)
    cin >> b[i];
  cout << max_vrednost(a, b) << "\n";
  return 0;
}