#include <bits/stdc++.h>
using namespace std;
namespace std {
#ifndef LOCAL
#define cerr \
if (0) cerr
#endif
} // namespace std
int64_t prf[100005];
int a[100005];
int64_t dp[100005];
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
int64_t m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
prf[i] = prf[i - 1] + a[i];
}
deque<int> dq;
memset(dp, 0x3f, sizeof(dp));
const int64_t inf = dp[0];
dp[0] = 0;
for (int i = 1, j = 0; i <= n; i++) {
while (j < i && prf[i] - prf[j] > m) {
++j;
}
while (!dq.empty() && dq.front() <= j) {
dq.pop_front();
}
while (!dq.empty() && a[dq.back()] < a[i]) {
dq.pop_back();
}
dq.push_back(i);
int last = j;
for (auto it : dq) {
dp[i] = min(dp[i], dp[last] + a[it]);
last = it;
}
}
cout << (dp[n] == inf ? -1 : dp[n]);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIHN0ZCB7CiNpZm5kZWYgTE9DQUwKI2RlZmluZSBjZXJyIFwKICBpZiAoMCkgY2VycgojZW5kaWYKfSAgLy8gbmFtZXNwYWNlIHN0ZAoKaW50NjRfdCBwcmZbMTAwMDA1XTsKaW50IGFbMTAwMDA1XTsKaW50NjRfdCBkcFsxMDAwMDVdOwoKaW50MzJfdCBtYWluKCkgewogIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgY2luLnRpZSgwKTsKICBpbnQgbjsKICBpbnQ2NF90IG07CiAgY2luID4+IG4gPj4gbTsKICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgIGNpbiA+PiBhW2ldOwogICAgcHJmW2ldID0gcHJmW2kgLSAxXSArIGFbaV07CiAgfQogIGRlcXVlPGludD4gZHE7CiAgbWVtc2V0KGRwLCAweDNmLCBzaXplb2YoZHApKTsKICBjb25zdCBpbnQ2NF90IGluZiA9IGRwWzBdOwogIGRwWzBdID0gMDsKICBmb3IgKGludCBpID0gMSwgaiA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICB3aGlsZSAoaiA8IGkgJiYgcHJmW2ldIC0gcHJmW2pdID4gbSkgewogICAgICArK2o7CiAgICB9CiAgICB3aGlsZSAoIWRxLmVtcHR5KCkgJiYgZHEuZnJvbnQoKSA8PSBqKSB7CiAgICAgIGRxLnBvcF9mcm9udCgpOwogICAgfQogICAgd2hpbGUgKCFkcS5lbXB0eSgpICYmIGFbZHEuYmFjaygpXSA8IGFbaV0pIHsKICAgICAgZHEucG9wX2JhY2soKTsKICAgIH0KICAgIGRxLnB1c2hfYmFjayhpKTsKICAgIGludCBsYXN0ID0gajsKICAgIGZvciAoYXV0byBpdCA6IGRxKSB7CiAgICAgIGRwW2ldID0gbWluKGRwW2ldLCBkcFtsYXN0XSArIGFbaXRdKTsKICAgICAgbGFzdCA9IGl0OwogICAgfQogIH0KICBjb3V0IDw8IChkcFtuXSA9PSBpbmYgPyAtMSA6IGRwW25dKTsKICByZXR1cm4gMDsKfQo=