#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10, maxm = 3e3 + 10, Inf = 0x3f3f3f3f;
int a[maxn], b[maxm], sf[maxm], dis[maxm];
int n, m, p, nwn, ans = -1;
bool vis[maxn];
priority_queue<pair<int, int> >pq;
void dij() {
memset(dis, Inf, sizeof dis);
dis[0] = 0;
pq.push({0, 0});
while (pq.size()) {
int x = pq.top().second;
pq.pop();
if (vis[x]) {
continue;
}
vis[x] = 1;
for (int i = 1; i <= nwn; ++i) {
int nxt = x + b[i];
if (nxt >= p) {
nxt -= p;
}
if (dis[nxt] > dis[x] + b[i]) {
dis[nxt] = dis[x] + b[i];
pq.push({-dis[nxt], nxt});
}
}
}
return;
}
int main() {
scanf("%d%d", &n, &m);
p = m;
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
if (a[i] <= m + 1) {
printf("-1");
return 0;
}
if (a[i] > p) {
p = a[i];
}
for (int j = 0; j <= m; ++j) {
if (!sf[a[i] - j]) {
b[++nwn] = a[i] - j;
sf[a[i] - j] = 1;
}
}
}
dij();
for (int i = 1; i < p; ++i) {
ans = max(ans, dis[i] - p);
}
printf("%d", ans);
return 0;
}