#define x first #define y second #define x1 X1 #define x2 X2 #define y1 Y1 #define y2 Y2 #define mp make_pair #define pb push_back
usingnamespacestd;
typedeflonglong LL; typedef pair<int, int> pii;
template <typename T> inlineintChkmax(T &a, T b){ return a < b ? a = b, 1 : 0; } template <typename T> inlineintChkmin(T &a, T b){ return a > b ? a = b, 1 : 0; } inlineintread() { int sum = 0, fl = 1; char ch = getchar(); for (; !isdigit(ch); ch = getchar()) if (ch == '-') fl = -1; for (; isdigit(ch); ch = getchar()) sum = (sum << 3) + (sum << 1) + ch - '0'; return sum * fl; }
constint MaxN = 50 + 5;
int N, A[MaxN], B[MaxN], Dis[MaxN][MaxN];
inlineintCheck(LL ans) { memset(Dis, 0, sizeof Dis); for (int i = 0; i <= 50; ++i) Dis[i][i] = 1; for (int i = 1; i <= 50; ++i) if ((1ll << i) & ans) for (int j = 0; j <= 50; ++j) Dis[j][j % i] = 1; for (int k = 0; k <= 50; ++k) for (int i = 0; i <= 50; ++i) for (int j = 0; j <= 50; ++j) if (Dis[i][k] && Dis[k][j]) Dis[i][j] = 1; for (int i = 1; i <= N; ++i) if (!Dis[A[i]][B[i]]) return0; return1; }
intmain() { #ifdef hk_cnyali freopen("C.in", "r", stdin); freopen("C.out", "w", stdout); #endif N = read(); for (int i = 1; i <= N; ++i) A[i] = read(); for (int i = 1; i <= N; ++i) B[i] = read(); LL ans = (1ll << 51) - 1; for (int i = 50; i >= 0; --i) { ans ^= (1ll << i); if (!Check(ans)) ans ^= (1ll << i); } cout<<(ans == ((1ll << 51) - 1) ? -1 : ans)<<endl; return0; }