#include<cstdio>
#include<cstring>
using namespace std;
long long answer,ans=1;
long long used[20],x[101];
bool prime[101];
int n;
long long gcd(long long x,long long y)
{
	if (y==0) return x;
	return gcd(y,x%y);
}
void dfs(int k,long long sum)
{
	if (k>used[0])
	{
		bool bo=false;
		for (int i=1;i<=n;i++)
		{
			if (gcd(sum,x[i])==1)
			{
				bo=true;break;
			}
		}
		if (!bo)
			if (answer>sum) answer=sum;
		return;
	}
	dfs(k+1,sum*used[k]);
	dfs(k+1,sum);
}
int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%lld",&x[i]);
	long long ans=1;
	memset(prime,true,sizeof(prime));
	for (int i=2;i<=50;i++)
		for (int j=2;j<i;j++)
			if (i%j==0) prime[i]=false;
	ans=1;
	for (int i=1;i<=n;i++)
		if (prime[x[i]]&&x[i]*2>50) ans*=x[i];
	for (int i=1;i<=25;i++)
		if (prime[i])
			used[++used[0]]=i;
	answer=3e18;
	dfs(1,ans);
	printf("%lld\n",answer);
}
#include<bits/stdc++.h>
#define N 500005
using namespace std;
int n,zs,zt;
char s[N],t[N];
int front[N],behind[N];
void init(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		cin>>s[i];
		if(s[i]=='0')zs++;
	}
	for(int i=1;i<=n;i++){
		cin>>t[i];
		if(t[i]=='0')zt++;
	}
}
int main(){
	init();
	if(zs!=zt)printf("-1");
	else{
		int ans=zs;
		int nums=0,numt=0;
		for(int i=1;i<=n;i++){
			if(s[i]=='0')nums++;
			if(t[i]=='0')numt++;
			if(s[i]=='0'&&t[i]=='0'&&nums==numt){
				ans--;
			}
		}
		printf("%d",ans);
	}
	return 0;
}