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

int n, a[60], b[60], vis[60], cnt, used[60];
long long ans;

void Dfs(int x, int up) {
  if(vis[x]) return;
  vis[x] = 1;
  for(int i = 1; i < up; i++)
    Dfs(x % i, up);
  for(int i = 1; i <= cnt; i++)
    Dfs(x % used[i], up);
}

bool HavetoAdd(int x) {
  for(int i = 1; i <= n; i++) {
    memset(vis, 0, sizeof(vis));
    Dfs(a[i], x);
    if(!vis[b[i]]) return 0;
  }
  return 1;
}

int main(void) {
  scanf("%d", &n);
  for(int i = 1; i <= n; i++) 
    scanf("%d", &a[i]);
  for(int i = 1; i <= n; i++) 
    scanf("%d", &b[i]);
  for(int i = 50; i >= 1; i--) {
    if(HavetoAdd(i)) continue;
    //cerr << i << endl;
    used[++cnt] = i;
    ans += 1LL << i;
    if(!HavetoAdd(i)) return puts("-1"), 0;
  }
  printf("%lld\n", ans);
  return 0;
}
