#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
#define int long long
bool book[N];
int n,m;
int sum[N],a[N];
struct node{
int val,l,r;
friend bool operator<(const node a,const node b){
return a.val>b.val;
}
};
int q[N],dp[N];
priority_queue<node> pq;
signed main(){
std::ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
if(a[i]>m){
cout<<-1;
return 0;
}
}
int x=1,head=0,tail=-1;
for(int i=1;i<=n;i++){
while(head<=tail&&sum[i]-sum[q[head]-1]>m){
book[q[head]]=1;
head++;
}
while(head<=tail&&a[q[tail]]<=a[i]){
book[q[tail]]=1;
tail--;
}
int j;
if(head<=tail){
j=q[tail];
}else{
j=1;
}
pq.push({dp[j]+a[i],j,i});
q[++tail]=i;
while(sum[i]-sum[x-1]>m)x++;
while(!pq.empty() && (book[pq.top().r]==1||(sum[i]-sum[pq.top().l-1])>m) )pq.pop();
if(!pq.empty()){
dp[i]=pq.top().val;
}else{
dp[i]=dp[x-1]+a[q[head]];
}
}
cout<<dp[n];
return 0;
}