#include <bits/stdc++.h>
#define ll long long
#define MAXN 200010
#define MAXV 6000010
using namespace std;
map<ll,ll> startt,startt1;
set<ll> vals,vals1;
ll a[MAXN],b[MAXN],ind[MAXV][2],pref[MAXN],cnt=1;
void Add(ll pos,ll val,ll cur)
{
    if (cur<0)
        return;
    ll bit=((1<<cur)&val)!=0;
    if (!ind[pos][bit])
        ind[pos][bit]=cnt++;
    Add(ind[pos][bit],val,cur-1);
}
ll Find(ll pos,ll val,ll cur)
{
    if (cur<0)
        return 0;
    ll bit=((1<<cur)&val)!=0;
    if (ind[pos][1-bit])
        return (1<<cur)+Find(ind[pos][1-bit],val,cur-1);
    return Find(ind[pos][bit],val,cur-1);
}
int main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    ll n;
    cin >> n;
    for (ll i=1;i<=n;i++)
    {
        cin >> a[i];
        pref[i]=pref[i-1]^a[i];
    }
    for (ll i=1;i<=n;i++)
        cin >> b[i];
    ll curand=(1<<30)-1,ans=0;
    for (ll i=n;i>0;i--)
    {
        curand&=b[i];
        startt1.clear();
        vals1.clear();
        for (ll j : vals)
        {
            startt1[j&b[i]]=startt[j];
            vals1.insert(j&b[i]);
        }
        swap(startt,startt1);
        swap(vals,vals1);
        if (!startt[curand])
        {
            startt[curand]=cnt++;
            vals.insert(curand);
        }
        Add(startt[curand],pref[i],29);
        for (ll j : vals)
            ans=max(ans,j*Find(startt[j],pref[i-1],29));
    }
    cout << ans;
    return 0;
}