#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 200005;
const int MAXK = 25;
int N;
ll X;
ll A[MAXN];
// divisors[X + k]
vector<ll> divisors[MAXK];
// cost[i][k]: cost to make A[i] gcd > 1 with X + k
ll cost[MAXN][MAXK];
// prefix sum for cost[][k]
ll pref[MAXK][MAXN];
// trial division up to sqrt(X)
void factorize(ll Y, vector<ll> &D) {
for (ll d = 2; d * d <= Y; ++d) {
if (Y % d == 0) {
D.push_back(d);
while (Y % d == 0) Y /= d;
}
}
if (Y > 1) D.push_back(Y);
}
ll get_cost(ll a, const vector<ll> &D) {
ll best = LLONG_MAX;
for (ll d : D) {
ll add = (d - a % d) % d;
best = min(best, add);
}
return best;
}
ll get_sum(int k, int l, int r) {
if (l == 0) return pref[k][r];
return pref[k][r] - pref[k][l - 1];
}
ll solve(int l, int r, int k) {
if (k >= MAXK) return LLONG_MAX; // exceeds limit
if (l == r) return cost[l][k];
int m = (l + r) / 2;
ll left = solve(l, m, k + 1);
ll right_gcd = get_sum(k, m + 1, r);
ll right = solve(m + 1, r, k + 1);
ll left_gcd = get_sum(k, l, m);
return min(left + right_gcd, right + left_gcd);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N >> X;
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
for (int k = 0; k < MAXK; ++k) {
ll Y = X + k;
factorize(Y, divisors[k]);
}
for (int i = 0; i < N; ++i) {
for (int k = 0; k < MAXK; ++k) {
cost[i][k] = get_cost(A[i], divisors[k]);
}
}
for (int k = 0; k < MAXK; ++k) {
pref[k][0] = cost[0][k];
for (int i = 1; i < N; ++i) {
pref[k][i] = pref[k][i - 1] + cost[i][k];
}
}
ll ans = solve(0, N - 1, 0);
if (ans >= LLONG_MAX / 2) cout << -1 << '\n';
else cout << ans << '\n';
return 0;
}