#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstring>
#define SF scanf
#define PF printf
#define MAXN 60
using namespace std;
typedef long long ll;
bool used[MAXN],vis[MAXN];
ll ans;
int A[MAXN],B[MAXN],n;
bool w[MAXN][MAXN];
void build(){
    for(int i=1;i<=50;i++)
        if(used[i]==1){
            for(int j=0;j<=50;j++)
                w[j][j%i]=1;
        }
}
void dfs(int x){
    vis[x]=1;
    for(int i=0;i<=50;i++)
        if(w[x][i]==1&&vis[i]==0)
            dfs(i);
}
bool check(){
    for(int i=0;i<n;i++){
        memset(vis,0,sizeof vis);
        dfs(A[i]);
        if(vis[B[i]]==0)
            return 0;
    }
    return 1;
}
int main(){
    SF("%d",&n);
    for(int i=0;i<n;i++)
        SF("%d",&A[i]);
    for(int i=0;i<n;i++)
        SF("%d",&B[i]);
    for(int i=1;i<=50;i++)
        used[i]=1;
    build();
    if(check()==0){
        PF("-1\n");
        return 0;
    }
    for(int i=50;i>=0;i--){
        memset(w,0,sizeof w);
        used[i]=0;
        build();
        if(check()==0){
            used[i]=1;
            ans+=(1ll<<i);
        }
    }
    PF("%lld",ans);
}
