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

set <int> S;
vector <vector <int>> adj(51);
int n;
vector <int> a, b;
bool mark[51];

void DFS(int v){
	mark[v] = true;
	for (auto u: adj[v]){
		if (!(mark[u])){
			DFS(u);
		}
	}
}

bool check_set(){
	for (int i = 0; i <= 50; i++){
		adj[i].clear();
		for (auto s: S){
			adj[i].push_back(i % s);
		}
	}
	for (int i = 0; i < n; i++){
		for (int j = 0; j <= 50; j++)
			mark[j] = false;
		DFS(a[i]);
		if (!(mark[b[i]]))
			return false;
	}
	return true;
}

int main(){
	ios::sync_with_stdio(false);
	cin >> n;
	a.resize(n);
	b.resize(n);
	for (int i = 0; i < n; i++){
		cin >> a[i];
	}
	for (int i = 0; i < n; i++){
		cin >> b[i];
	}
	for (int i = 1; i <= 50; i++){
		S.insert(i);
	}
	// cout << 1 << endl;
	if (!check_set()){
		cout << -1;
		return 0;
	}
	// cout << 2 << endl;
	long long ans = 0;
	for (int i = 50; i >= 1; i--){
		S.erase(i);
		if (!check_set()){
			S.insert(i);
			ans += powl(2, i);
		}
		// cout << i << endl;
	}
	cout << ans;
}