#include<bits/stdc++.h>
using namespace std;
typedef long long int lli;
typedef long double ld;
/*
#include <chrono> 
using namespace std::chrono;
#include <boost/multiprecision/cpp_int.hpp> 
using namespace boost::multiprecision;
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
using namespace __gnu_pbds; 
#define ordered_set tree<pair<lli,lli>, null_type,less<pair<lli,lli>>, rb_tree_tag,tree_order_statistics_node_update> 
*/
#define endl "\n"
#define pb push_back
const lli mod=1e9+7;
const lli mod1=998244353;
#define fir first
#define sec second
#define plli pair<lli,lli>
/*
lli power(lli a, lli b) {
    lli res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}
lli powermod(lli a, lli b) 
{
    lli res = 1;
    while (b > 0) {
        if (b & 1)
            res = ((res%mod)*(a%mod))%mod;
        a = (a * a)%mod;
        b >>= 1;
    }
    return res;
}
*/
bool comp(plli &p1,plli &p2)
{
    return (p1.fir>p2.fir || (p1.fir==p2.fir and p1.sec<p2.sec));
}
int main()
{
    //ios_base::sync_with_stdio(false);
    //cin.tie(NULL);
    lli T;
    T=1;
    //cin>>T;
    while(T--)
    {
        lli i,j,k;
        vector<lli> v;
        lli vis[51]={0};
        for(i=2;i<=50;i++)
        {
            if(!vis[i])
            {
                for(j=i*i;j<=50;j+=i)
                {
                    vis[j]=1;
                }
                v.pb(i);
            }
        }
        lli x=v.size();
        lli n;
        cin>>n;
        lli a[n];
        for(i=0;i<n;i++)
            cin>>a[i];
        lli b[n];
        lli ans=mod*mod;
        for(i=0;i<(1<<x);i++)
        {
            for(j=0;j<n;j++)
                b[j]=a[j];
            lli temp=1;
            for(j=0;j<x;j++)
            {
                if(i&(1<<j))
                {
                    for(k=0;k<n;k++)
                    {
                        while(b[k]%v[j]==0)
                            b[k]/=v[j];
                    }
                    temp*=v[j];
                }
            }
            lli flag=1;
            for(j=0;j<n;j++)
                if(b[j]==a[j])
                    flag=0;
            if(flag)
                {ans=min(ans,temp);}
        }
        cout<<ans<<"\n";
    }   
    return 0;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include<bits/stdc++.h>
#include<iostream>
#include<set>
#include<map>
#include<iterator>
#define ll              long long
#define lli             long long int
#define pb              push_back
#define RIP(i,n)        for(int i=0; i<n; i++)
#define RIP1(i,n)       for(int i=n-1; i>=0; i--)
#define FOR(i,a,b)      for(int i=a;i<(b); i++)
#define FOR1(i,a,b)     for(int i=a; i>=(b); i--)
#define sc(a)           scanf("%lld",&a)
#define SC(a)           scanf("%d",&a)
#define cin(a)          cin >> a
#define cout(a)         cout << a
#define pi              acos(-1)
#define pr(a)           printf("%lld\n",a)
#define PR(a)           printf("%lld ",a)
#define s(a,b)          sort(a,b)
#define sz(x)           (int)(x).size()
#define nl              '\n'
#define Max             1001
#define mod             1e9 + 7
using namespace std;
void c_p_c()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    /*#ifdef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    #endif*/
}
int dp[1001][1001],a[Max],b[Max];
int cost(int i,int j)
{
    if(i==-1 && j==-1)
    {
        return 0;
    }
    if(i==-1)
    {
        return j+1;
    }
    if(j==-1)
    {
        return i+1;
    }
    if(dp[i][j]!=0)
    {
        return dp[i][j];
    }

    int x=cost(i-1,j)+1;
    int y=cost(i,j-1)+1;
    int z=cost(i-1,j-1)+(a[i]!=b[j]);

    return dp[i][j]=min(x,min(y,z));
}
int main()
{
    c_p_c();
    int n,m;
    SC(n);SC(m);
    //int a[n],b[m];
    RIP(i,n)
    {
        SC(a[i]);
    }
    RIP(i,m)
    {
        SC(b[i]);
    }
    int ans = cost(n-1,m-1);
    cout << ans << nl;
}
