/// Remainder Game Atcoder
/// Author: PmQwerty
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 51;
const long long INF = 1e18;
int a[MAXN];
int b[MAXN];
int n;
vector<int> s;
long long d[MAXN][MAXN];
void floyd(int l){
for (int i = 0; i <= 50; i++){
for (int j = 0; j <= 50; j++) d[i][j] = INF;
}
for (int i = 0; i <= 50; i++) d[i][i] = 0;
for (int i = 0; i <= 50; i++){
for (int j = 1; j < l; j++){
d[i][i % j] = min(d[i][i % j], (1LL << j));
}
}
for (int i = 0; i <= 50; i++){
for (int j: s){
d[i][i % j] = min(d[i][i % j], (1LL << j));
}
}
for (int k = 0; k <= 50; k++){
for (int i = 0; i <= 50; i++){
for (int j = 0; j <= 50; j++){
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
}
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) cin >> b[i];
floyd(51);
for (int i = 1; i <= n; i++){
if (d[a[i]][b[i]] == INF){
cout << -1 << '\n';
return 0;
}
}
for (int i = 50; i >= 1; i--){
floyd(i);
for (int j = 1; j <= n; j++){
if (d[a[j]][b[j]] == INF){
s.push_back(i);
break;
}
}
}
long long ans = 0;
for (int x: s) ans += (1LL << x);
cout << ans << '\n';
}