#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const int N = 2e5 + 20;

int max_xor(vector<int> arr, int n){
    int maxx = 0, mask = 0;

    set<int> se;

    for(int i = 30; i >= 0; i--){

        mask |= (1 << i);

        for(int i = 0; i < n; ++i){
            se.insert(arr[i] & mask);
        }

        int newMaxx = maxx | (1 << i);

        for(int prefix : se){
            if(se.count(newMaxx ^ prefix)){
                maxx = newMaxx;
                break;
            }
        }
        se.clear();
    }

    return maxx;
}

void solve()
{
    int n;
    cin >> n;

    vector<int> a(n);
    vector<int> b(n);

    bool check1 = false, check2 = false;

    for(int i = 0; i < n; i++){
        cin >> a[i];
        if(a[i]!=1){
            check1 = true;
        }

    }
    for(int i = 0; i < n; i++){
        cin >> b[i];
        if(b[i]!=1){
            check2 = true;
        }
    }

    vector<int> pref(n);
    pref[0] = a[0];

    for(int i  =1; i  < n; i++){
        pref[i] = pref[i-1]^a[i];
    }

    if(check1==false){
        int ans = 0;

        for(int i = 0; i < n; i++){
            ans = max(ans,b[i]);
        }
        cout << ans << "\n";
        return;
    }
    if(check2==false){
        int x = max_xor(pref,n);
        int ans = 0;
        for(int i = 0 ; i < n; i++){
            ans = max(ans,a[i]);
        }
        cout << max(x,ans) << "\n";
        return;
    }




}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t = 1;
    //cin >> t;
    while (t--)
    {
        solve();
    }

}