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

int N;
int A[50], B[50];
vector<bool> op(51, true);

bool pos(int cur){
  vector<bool> p(51, false);
  p[A[cur]] = true;
  for(int m=50; m>=1; m--){
    if(op[m]){
      for(int i=1; i<=50; i++){
        if(p[i]){
          p[i%m] = true;
        }
      }
    }
  }

  return p[B[cur]];
}

bool posAll(){
  for(int i=0; i<N; i++){
    if(!pos(i))
      return false;
  }
  return true;
}

int main(){
  cin >> N;
  for(int i=0; i<N; i++){
    cin >> A[i];
  }
  for(int i=0; i<N; i++){
    cin >> B[i];
  }

  if(!posAll()){
    cout << -1 << endl;
    return 0;
  }
  for(int i=50; i>=1; i--){
    op[i] = false;
    if(!posAll()){
      op[i] = true;
    }
  }

  long long res = 0;
  long long pow = 2;
  for(int i=1; i<=50; i++){
    if(op[i]){
      res += pow;
    }
    pow *= 2;
  }

  cout << res << endl;

  return 0;
}