#include <bits/stdc++.h>
#define ll long long
#define MAXN 200010
#define MAXV 6000010
using namespace std;
ll a[MAXN],b[MAXN],ind[MAXV][2],cnt=2,pref[MAXN];
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];
    for (ll i=1;i<=n;i++)
        cin >> b[i];
    if (n<=2000)
    {
        ll ans=0;
        for (ll i=1;i<=n;i++)
        {
            ans=max(ans,a[i]*b[i]);
            ll xorr=a[i],andd=b[i];
            for (ll j=i+1;j<=n;j++)
            {
                xorr^=a[j];
                andd&=b[j];
                ans=max(ans,xorr*andd);
            }
        }
        cout << ans;
        return 0;
    }
    bool a1=true;
    for (ll i=1;i<=n;i++)
    {
        if (a[i]!=1)
            a1=false;
    }
    if (a1)
    {
        ll ans=0;
        for (ll i=1;i<=n;i++)
            ans=max(ans,b[i]);
        cout << ans;
        return 0;
    }
    bool b1=true;
    for (ll i=1;i<=n;i++)
    {
        if (b[i]!=1)
            b1=false;
    }
    if (b1)
    {
        ll ans=0;
        for (ll i=1;i<=n;i++)
            pref[i]=pref[i-1]^a[i];
        for (ll i=n;i>0;i--)
        {
            Add(1,pref[i],29);
            ans=max(ans,Find(1,pref[i-1],29));
        }
        cout << ans;
    }
    return 0;
}