code:
#include<bits/stdc++.h>
using namespace std;
#define PII pair<int, int>
int n, m;
int l[109];
int gcd;
int s = 114514;
int dis[4009];
bitset<4009> st;
priority_queue<PII, vector<PII>, greater<PII> > p;
void dij() {
memset(dis, 0x7f, sizeof(dis));
dis[0] = 0;
p.push({0, 0});
while(p.size()) {
int u = p.top().second;
p.pop();
if(st[u]) continue;
st[u] = 1;
for(int i = 2; i <= 4000; i++) {
if(!st[i]) continue;
int v = (u + i) % s, d = i;
if(dis[v] > dis[u] + d) {
dis[v] = dis[u] + d;
p.push({dis[v], v});
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> l[i];
gcd = __gcd(gcd, l[i]);
for(int j = 0; j <= m && j < l[i]; j++) st[l[i] - j] = 1,gcd = __gcd(l[i] - j, gcd), s = min(s, l[i] - j);
if(l[i] - m <= 1) {
cout << -1;
return 0;
}
}
if(gcd > 1) {
cout << -1;
return 0;
}
dij();
int ans = -1;
for(int i = 1; i < s; i++) {
ans = max(ans, dis[i] - s);
}
cout << ans;
return 0;
}