#include <bits/stdc++.h>
using namespace std;

typedef long long lint;

const int inf = 1000;
int n, a[55], b[55];
lint x[55];
int m[55][55];

int dp(int x, int y) {
	if (x==y) return 0;
	if (x>y) return inf;
	if (m[x][y]) return m[x][y];
	m[x][y] = inf;
	for (int i=1; i<55; i++) if (dp(x, y%i) != inf) {
		return m[x][y] = i;
	} return m[x][y];
}

int main()
{
	cin >> n;
	for (int i=0; i<n; i++) cin >> a[i], x[i] |= (1ll << a[i]);
	for (int i=0; i<n; i++) cin >> b[i];

	lint ans = 0;
	while (true) {
		int mx = 0;
		for (int i=0; i<n; i++) {
			int mn = inf;
			for (int k=0; k<55; k++) if ((x[i] >> k) & 1ll) mn = min(mn, dp(b[i], k));
			mx = max(mx, mn);
		}
		if (mx == inf) {
			cout << "-1\n";
			return 0;
		}
		if (!mx) break;
		ans |= (1ll << mx);

		for (int i=0; i<n; i++) {
			for (int k=55; k>=mx; k--) if ((x[i] >> k) & 1ll) x[i] |= 1ll << (k%mx);
		}
	}

	cout << ans << '\n';
}
