/*
* Copyright (c) 2025 Emon Thakur
* All rights reserved.
*/
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll a[200005],pfs[31][200005],n,x;
bool notprime[100006];
vector<ll>allprime;
void seive()
{
for(int i=2;i<=1000;i++)
{
if(notprime[i]) continue;
for(int j=i+i;j<=100000;j+=i) notprime[j]=true;
}
for(int i=2;i<=100000;i++) {if(!notprime[i]) allprime.push_back(i);}
}
void calcpfs()
{
for(ll k=x;k<x+30;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);
for(int i=1;i<=n;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]);
}
pfs[k-x][i] = pfs[k-x][i-1] + max(0ll,cnt);
}
}
}
ll ans(int start,int end,ll k)
{
if(start==end){
return pfs[k-x][start]-pfs[k-x][start-1];
}
int mid = (start+end-1)/2;
ll costleft = pfs[k-x][mid]-pfs[k-x][start-1];
ll costright = pfs[k-x][end]-pfs[k-x][mid];
return min(costright + ans(start,mid,k+1) , costleft + ans(mid+1,end,k+1));
}
void solve(int tc)
{
// string outp = "output"+to_string(tc)+".txt";
// string inp = "input"+to_string(tc)+".txt";
// ofstream file(outp);
// freopen(inp.c_str(),"r",stdin);
seive();
cin >> n >> x;
for(int i=1;i<=n;i++) cin >> a[i];
calcpfs();
cout << ans(1,n,x)<<'\n';
}
int main()
{
solve(0);
// int l=0,r=99;
// for(int i=l;i<=r;i++) solve(i);
}