#include <bits/stdc++.h>

using namespace std;

int n, ta[4*200010];

void bAXor(int a[], int poz, int lD, int dD) 
{
    if (lD == dD) 
    {
        ta[poz] = a[lD];
    } 
    else 
    {
        int tm = (lD + dD) / 2;
        bAXor(a, poz*2, lD, tm);
        bAXor(a, poz*2+1, tm+1, dD);
        ta[poz] = ta[poz*2] ^ ta[poz*2+1];
    }
}

int xorf(int poz, int ll, int dd, int l, int r) 
{
    if (l > r) 
    {
        return 0;
    }
    if (l == ll && r == dd) 
    {
        return ta[poz];
    }
    int tm = (ll + dd) / 2;
    return xorf(poz*2, ll, tm, l, min(r, tm)) ^ xorf(poz*2+1, tm+1, dd, max(l, tm+1), r);
}

int andCalc(int b[], int l, int r)
{
  int mr = b[l];
  
  for(int i = l + 1; i < r; i++)
   mr = mr & b[i];
   
  return mr;
}

int main()
{
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  
  cin >> n;
  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];
    
  bAXor(a, 1, 0, n - 1);
  
  int maxV = 0;
  
  for(int i = 0; i < n; i++)
  {
    for(int j = 0; j < n; j++)
    {
      int vxor = xorf(1, 0, n-1, i, j);
      int vand = andCalc(b, i, j);
      maxV = max(maxV, vxor * vand);
    }
  }
  
  cout << maxV;
  
  return 0;
}