/*
* Copyright (c) 2025 Emon Thakur
* All rights reserved.
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,x,a[200005];
bool notprime[1000006];
vector<ll>allprime;
void seive()
{
for(int i=2;i<=1000;i++)
{
if(notprime[i]) continue;
for(int j=i+i;j<=1000000;j+=i) notprime[j]=true;
}
for(int i=2;i<=1000000;i++) {if(!notprime[i]) allprime.push_back(i);}
}
ll cost(int l,int r,ll k)
{
vector<ll> pd;
ll kk = k;
for(auto p:allprime)
{
if(kk%p==0) pd.push_back(p);
while(kk%p==0) kk/=p;
}if(kk>1) pd.push_back(kk);
ll ans =0;
for(int i=l;i<=r;i++)
{
ll cnt = 1e9;
for(auto gcd:pd)
{
if(a[i]%gcd==0) {cnt=0; break;}
cnt = min(cnt ,((a[i]+gcd)/gcd)*gcd - a[i]);
}
ans += cnt;
}
return ans;
}
ll ans(int start,int end,ll k)
{
if(start==end)
{
if(__gcd(a[start],k)>1) return 0;
else return cost(start,end,k);
}
int mid = (start+end-1)/2;
return min(cost(start,mid,k)+ans(mid+1,end,k+1) , cost(mid+1,end,k)+ans(start,mid,k+1));
}
int main()
{
seive();
cin >> n >> x;
for(int i=1;i<=n;i++) cin >> a[i];
cout<<ans(1,n,x)<<'\n';
}