#include <bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define Bit(mask , i) ((mask >> i) & 1)
#define fi first
#define se second
#define _LOG2(nl) 31 - __builtin_clz(nl)
#define c_bit(nl) __builtin_popcount(nl)
#define ii pair<int , int>
#define lii pair<long long , pair<int , int>>
#define iii pair<int , pair<int , int>>
#define iiii pair<pair<int , int> , pair<int , int>>
#define llll pair<pair<__int128 , __int128> , pair<__int128 , __int128>>
#define li pair<long long , int>
#define db long double
#define onBit(mask , i) (mask | (1 << i))
#define offBit(mask , i) (mask & (~(1 << i)))
const long long INF = 1e16;
const long long MOD = 1e9 + 7;
const int N = 1e5 + 7;
int n , L[N];
long long m , a[N] , f[N] , t[4 * N] , lazy[4 * N];
bool bl = 1;
void ktao(){
int i = n , j = n;
long long sum = a[n];
while (i > 0){
while (j > 1 && sum + a[j - 1] <= m){
--j;
sum += a[j];
}
L[i] = j;
sum -= a[i];
--i;
if (j > i){
j = i;
sum += a[i];
}
}
}
void inp(){
cin >> n >> m;
for (int i = 1 ; i <= n ; ++i){
cin >> a[i];
if (a[i] > m) bl = 0;
}
if (!bl){
cout << -1;
exit(0);
}
ktao();
}
void push(int id){
if (lazy[id]){
lazy[id << 1] += lazy[id];
t[id << 1] += lazy[id];
lazy[id << 1 | 1] += lazy[id];
t[id << 1 | 1] += lazy[id];
lazy[id] = 0;
}
}
void update(int id , int l , int r , int u , int v , long long val){
if (l > v || r < u) return;
if (u <= l && r <= v){
t[id] += val;
lazy[id] += val;
return;
}
int mid = (l + r) >> 1;
push(id);
update(id << 1 , l , mid , u , v , val);
update(id << 1 | 1 , mid + 1 , r , u , v , val);
if (t[id << 1] == 0) t[id] = t[id << 1 | 1];
else if (t[id << 1 | 1] == 0) t[id] = t[id << 1];
else t[id] = min(t[id << 1] , t[id << 1 | 1]);
}
long long get(int id , int l , int r , int u , int v){
if (l > v || r < u) return INF;
if (u <= l && r <= v) return t[id];
int mid = (l + r) >> 1;
push(id);
long long t1 = get(id << 1 , l , mid , u , v);
long long t2 = get(id << 1 | 1 , mid + 1 , r , u , v);
if (t1 == 0) t1 = INF;
if (t2 == 0) t2 = INF;
return min(t1 , t2);
}
void solve(){
stack<iii> st;
f[1] = a[1];
st.push({1 , {1 , 1}});
update(1 , 0 , n , 1 , 1 , f[1]);
update(1 , 0 , n , 0 , 0 , a[1]);
for (int i = 2 ; i <= n ; ++i){
update(1 , 0 , n , i - 1 , i - 1 , a[i]);
int l = i;
while (st.size() && a[i] >= a[st.top().fi]){
update(1 , 0 , n , st.top().se.fi - 1 , st.top().se.se - 1 , a[i] - a[st.top().fi]);
l = st.top().se.fi;
st.pop();
}
st.push({i , {l , i}});
f[i] = get(1 , 0 , n , L[i] - 1 , i - 1);
update(1 , 0 , n , i , i , f[i]);
}
cout << f[n];
}
int main(){
// freopen("difmax.inp" , "r" , stdin);
// freopen("difmax.out" , "w" , stdout);
faster;
inp();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmFzdGVyIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpCiNkZWZpbmUgQml0KG1hc2sgLCBpKSAoKG1hc2sgPj4gaSkgJiAxKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgX0xPRzIobmwpIDMxIC0gX19idWlsdGluX2NseihubCkKI2RlZmluZSBjX2JpdChubCkgX19idWlsdGluX3BvcGNvdW50KG5sKQojZGVmaW5lIGlpIHBhaXI8aW50ICwgaW50PgojZGVmaW5lIGxpaSBwYWlyPGxvbmcgbG9uZyAsIHBhaXI8aW50ICwgaW50Pj4KI2RlZmluZSBpaWkgcGFpcjxpbnQgLCBwYWlyPGludCAsIGludD4+CiNkZWZpbmUgaWlpaSBwYWlyPHBhaXI8aW50ICwgaW50PiAsIHBhaXI8aW50ICwgaW50Pj4KI2RlZmluZSBsbGxsIHBhaXI8cGFpcjxfX2ludDEyOCAsIF9faW50MTI4PiAsIHBhaXI8X19pbnQxMjggLCBfX2ludDEyOD4+CiNkZWZpbmUgbGkgcGFpcjxsb25nIGxvbmcgLCBpbnQ+CiNkZWZpbmUgZGIgbG9uZyBkb3VibGUKI2RlZmluZSBvbkJpdChtYXNrICwgaSkgKG1hc2sgfCAoMSA8PCBpKSkKI2RlZmluZSBvZmZCaXQobWFzayAsIGkpIChtYXNrICYgKH4oMSA8PCBpKSkpCgpjb25zdCBsb25nIGxvbmcgSU5GID0gMWUxNjsKY29uc3QgbG9uZyBsb25nIE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBOID0gMWU1ICsgNzsKaW50IG4gLCBMW05dOwpsb25nIGxvbmcgbSAsIGFbTl0gLCBmW05dICwgdFs0ICogTl0gLCBsYXp5WzQgKiBOXTsKYm9vbCBibCA9IDE7Cgp2b2lkIGt0YW8oKXsKICAgIGludCBpID0gbiAsIGogPSBuOwogICAgbG9uZyBsb25nIHN1bSA9IGFbbl07CiAgICB3aGlsZSAoaSA+IDApewogICAgICAgIHdoaWxlIChqID4gMSAmJiBzdW0gKyBhW2ogLSAxXSA8PSBtKXsKICAgICAgICAgICAgLS1qOwogICAgICAgICAgICBzdW0gKz0gYVtqXTsKICAgICAgICB9CgogICAgICAgIExbaV0gPSBqOwogICAgICAgIHN1bSAtPSBhW2ldOwogICAgICAgIC0taTsKICAgICAgICBpZiAoaiA+IGkpewogICAgICAgICAgIGogPSBpOwogICAgICAgICAgIHN1bSArPSBhW2ldOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBpbnAoKXsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IgKGludCBpID0gMSA7IGkgPD0gbiA7ICsraSl7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgaWYgKGFbaV0gPiBtKSBibCA9IDA7CiAgICB9CiAgICBpZiAoIWJsKXsKICAgICAgICBjb3V0IDw8IC0xOwogICAgICAgIGV4aXQoMCk7CiAgICB9CgogICAga3RhbygpOwp9Cgp2b2lkIHB1c2goaW50IGlkKXsKICAgIGlmIChsYXp5W2lkXSl7CiAgICAgICAgbGF6eVtpZCA8PCAxXSArPSBsYXp5W2lkXTsKICAgICAgICB0W2lkIDw8IDFdICs9IGxhenlbaWRdOwogICAgICAgIGxhenlbaWQgPDwgMSB8IDFdICs9IGxhenlbaWRdOwogICAgICAgIHRbaWQgPDwgMSB8IDFdICs9IGxhenlbaWRdOwogICAgICAgIGxhenlbaWRdID0gMDsKICAgIH0KfQoKdm9pZCB1cGRhdGUoaW50IGlkICwgaW50IGwgLCBpbnQgciAsIGludCB1ICwgaW50IHYgLCBsb25nIGxvbmcgdmFsKXsKICAgIGlmIChsID4gdiB8fCByIDwgdSkgcmV0dXJuOwogICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpewogICAgICAgIHRbaWRdICs9IHZhbDsKICAgICAgICBsYXp5W2lkXSArPSB2YWw7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICBwdXNoKGlkKTsKICAgIHVwZGF0ZShpZCA8PCAxICwgbCAsIG1pZCAsIHUgLCB2ICwgdmFsKTsKICAgIHVwZGF0ZShpZCA8PCAxIHwgMSAsIG1pZCArIDEgLCByICwgdSAsIHYgLCB2YWwpOwogICAgaWYgKHRbaWQgPDwgMV0gPT0gMCkgdFtpZF0gPSB0W2lkIDw8IDEgfCAxXTsKICAgIGVsc2UgaWYgKHRbaWQgPDwgMSB8IDFdID09IDApIHRbaWRdID0gdFtpZCA8PCAxXTsKICAgIGVsc2UgdFtpZF0gPSBtaW4odFtpZCA8PCAxXSAsIHRbaWQgPDwgMSB8IDFdKTsKfQoKbG9uZyBsb25nIGdldChpbnQgaWQgLCBpbnQgbCAsIGludCByICwgaW50IHUgLCBpbnQgdil7CiAgICBpZiAobCA+IHYgfHwgciA8IHUpIHJldHVybiBJTkY7CgogICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpIHJldHVybiB0W2lkXTsKCiAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgcHVzaChpZCk7CiAgICBsb25nIGxvbmcgdDEgPSBnZXQoaWQgPDwgMSAsIGwgLCBtaWQgLCB1ICwgdik7CiAgICBsb25nIGxvbmcgdDIgPSBnZXQoaWQgPDwgMSB8IDEgLCBtaWQgKyAxICwgciAsIHUgLCB2KTsKICAgIGlmICh0MSA9PSAwKSB0MSA9IElORjsKICAgIGlmICh0MiA9PSAwKSB0MiA9IElORjsKICAgIHJldHVybiBtaW4odDEgLCB0Mik7Cn0KCnZvaWQgc29sdmUoKXsKICAgIHN0YWNrPGlpaT4gc3Q7CiAgICBmWzFdID0gYVsxXTsKICAgIHN0LnB1c2goezEgLCB7MSAsIDF9fSk7CiAgICB1cGRhdGUoMSAsIDAgLCBuICwgMSAsIDEgLCBmWzFdKTsKICAgIHVwZGF0ZSgxICwgMCAsIG4gLCAwICwgMCAsIGFbMV0pOwoKICAgIGZvciAoaW50IGkgPSAyIDsgaSA8PSBuIDsgKytpKXsKICAgICAgICB1cGRhdGUoMSAsIDAgLCBuICwgaSAtIDEgLCBpIC0gMSAsIGFbaV0pOwogICAgICAgIGludCBsID0gaTsKICAgICAgICB3aGlsZSAoc3Quc2l6ZSgpICYmIGFbaV0gPj0gYVtzdC50b3AoKS5maV0pewogICAgICAgICAgICB1cGRhdGUoMSAsIDAgLCBuICwgc3QudG9wKCkuc2UuZmkgLSAxICwgc3QudG9wKCkuc2Uuc2UgLSAxICwgYVtpXSAtIGFbc3QudG9wKCkuZmldKTsKICAgICAgICAgICAgbCA9IHN0LnRvcCgpLnNlLmZpOwogICAgICAgICAgICBzdC5wb3AoKTsKICAgICAgICB9CgogICAgICAgIHN0LnB1c2goe2kgLCB7bCAsIGl9fSk7CiAgICAgICAgZltpXSA9IGdldCgxICwgMCAsIG4gLCBMW2ldIC0gMSAsIGkgLSAxKTsKICAgICAgICB1cGRhdGUoMSAsIDAgLCBuICwgaSAsIGkgLCBmW2ldKTsKICAgIH0KCiAgICBjb3V0IDw8IGZbbl07Cn0KCmludCBtYWluKCl7Ci8vICAgIGZyZW9wZW4oImRpZm1heC5pbnAiICwgInIiICwgc3RkaW4pOwovLyAgICBmcmVvcGVuKCJkaWZtYXgub3V0IiAsICJ3IiAsIHN0ZG91dCk7CiAgICBmYXN0ZXI7CiAgICBpbnAoKTsKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gMDsKfQo=