#include <bits/stdc++.h>

using namespace std;

class tmCvor{
    tmCvor* nula;
    tmCvor* jedinica;
public:
    tmCvor(){
        this->nula=NULL;
        this->jedinica=NULL;
    }
    friend class tmTrie;
};

class tmTrie{
    tmCvor* koren;
public:
    tmTrie(){
        this->koren=new tmCvor();
    }
    bool dljprazan(){
        if((this->koren->jedinica==NULL) && (this->koren->nula==NULL)){
            return true;
        }
        return false;
    }
    void dodaj(int x){
        int gr=(1<<29);
        tmCvor* trenutni=koren;
        while(gr>0){
            if(gr&x){
                if(trenutni->jedinica==NULL){
                    trenutni->jedinica=new tmCvor();
                }
                trenutni=trenutni->jedinica;
            }
            else{
                if(trenutni->nula==NULL){
                    trenutni->nula=new tmCvor();
                }
                trenutni=trenutni->nula;
            }
            gr>>=1;
        }
    }
    int ocitaj(int x){
        if(dljprazan()){
            return 0;
        }
        int gr=(1<<29);
        tmCvor* trenutni=koren;
        int rezultat=0;
        while(gr>0){
            if(gr&x){
                if(trenutni->nula==NULL){
                    trenutni=trenutni->jedinica;
                }
                else{
                    trenutni=trenutni->nula;
                    rezultat+=gr;
                }
            }
            else{
                if(trenutni->jedinica==NULL){
                    trenutni=trenutni->nula;
                }
                else{
                    trenutni=trenutni->jedinica;
                    rezultat+=gr;
                }
            }
            gr>>=1;
        }
        return rezultat;
    }
    void izbrisi_sve(){
        izbrisi(koren);
    }
    void dodaj_koren(){
        this->koren=new tmCvor();
    }
private:
    void izbrisi(tmCvor* trenutni){
        if(trenutni->nula!=NULL){
            izbrisi(trenutni->nula);
        }
        if(trenutni->jedinica!=NULL){
            izbrisi(trenutni->jedinica);
        }
        delete trenutni;
    }
};

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    int* a=new int[n];
    int* b=new int[n];
    int i,l;
    for(i=0;i<n;i++){
        cin>>a[i];
    }
    for(i=0;i<n;i++){
        cin>>b[i];
    }
    tmTrie** zaBitove=new tmTrie*[31];//30 je svih n
    int* granice=new int[31];
    int* andOperator=new int[31];
    zaBitove[30]=new tmTrie();
    zaBitove[30]->dodaj(a[n-1]);
    granice[30]=n;
    andOperator[i]=b[n-1];
    for(i=0;i<30;i++){
        zaBitove[i]=new tmTrie();
        if((b[n-1])&(1<<i)){
            granice[i]=n;
            zaBitove[i]->dodaj(a[n-1]);
        }
        else{
            granice[i]=n-1;
        }
        andOperator[i]=b[n-1];
    }
    long long maxx=b[n-1]*a[n-1];
    int gr;
    int pokazivacZaBitove;
    int pomoc;
    for(l=n-2;l>=0;l--){
        gr=1<<29;
        pokazivacZaBitove=29;
        while(gr>0){
            if((b[l])&gr){
                if(granice[pokazivacZaBitove]==l+1){
                    andOperator[pokazivacZaBitove]=b[l];
                }
                else{
                    andOperator[pokazivacZaBitove]=(andOperator[pokazivacZaBitove])&(b[l]);
                }
                pomoc=zaBitove[pokazivacZaBitove]->ocitaj(a[l]);
                zaBitove[pokazivacZaBitove]->dodaj(a[l]);
                if(pomoc*andOperator[pokazivacZaBitove]>maxx){
                    maxx=pomoc*andOperator[pokazivacZaBitove];
                    //cout<<l<<" "<<pomoc<<" "<<andOperator[pokazivacZaBitove]<<endl;
                }
            }
            else{
                granice[l]=l;
                zaBitove[pokazivacZaBitove]->izbrisi_sve();
                zaBitove[pokazivacZaBitove]->dodaj_koren();
            }
            gr>>=1;
            pokazivacZaBitove--;
        }

        //za ceo
        andOperator[30]=(andOperator[30])&(b[l]);
        pomoc=zaBitove[30]->ocitaj(a[l]);
        zaBitove[30]->dodaj(a[l]);
        if(pomoc*andOperator[30]>maxx){
            maxx=pomoc*andOperator[30];
            //cout<<l<<" "<<pomoc<<" "<<andOperator[pokazivacZaBitove]<<endl;
        }
    }
    cout<<maxx<<endl;
    delete[] a;
    delete[] b;
    for(i=0;i<31;i++){
        zaBitove[i]->izbrisi_sve();
        delete zaBitove[i];
    }
    delete[] zaBitove;
    delete[] granice;
    delete[] andOperator;
    return 0;
}