#include <bits/stdc++.h>
#define speed ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pb push_back
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()

using namespace std;

const int maxn = 2*1e5+10;

int segtree[2][maxn];
int unos[2][maxn];

void build(int v,int l,int r){
    if(l==r){
        segtree[0][v]=unos[0][l];
        segtree[1][v]=unos[1][l];
        return;
    }
    int s=(l+r)>>1;
    build(v<<1,l,s);
    build(v<<1|1,s+1,r);
    segtree[0][v]=(segtree[0][v<<1]^segtree[0][v<<1|1]);
    segtree[1][v]=(segtree[1][v<<1]&segtree[1][v<<1|1]);
}

int query1(int v,int l,int r, int tl, int tr){
    if(l>r)return 0;
    if(tl==l&&tr==r)return segtree[0][v];
    int s=(tl+tr)>>1;
    int num1=query1(v<<1,l,min(r,s),tl,s);
    int num2=query1(v<<1|1,max(l,s+1),r,s+1,tr);
    return (num1^num2);
}

int query2(int v,int l,int r, int tl, int tr){
    if(l>r)return -1;
    if(tl==l&&tr==r)return segtree[1][v];
    int s=(tl+tr)>>1;
    int num1=query2(v<<1,l,min(r,s),tl,s);
    int num2=query2(v<<1|1,max(l,s+1),r,s+1,tr);
    if(num1==-1)return num2;
    if(num2==-1)return num1;
    return (num1&num2);
}

signed main()
{
    speed;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>unos[0][i];
    for(int i=0;i<n;i++)cin>>unos[1][i];
    build(1,0,n-1);
    int res=0;
    for(int L=0;L<n;L++){
        for(int R=L;R<n;R++){
            int a=query1(1,L,R,0,n-1);
            int b=query2(1,L,R,0,n-1);
            res=max(res,a*b);
        }
    }
    cout<<res<<endl;
    return 0;
}