#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
int n; ll S;
int a[2 * N];
ll pref[2 * N];
int nxt[18][2 * N]; // nxt[k][i] = vị trí mà ta nhảy đến nếu bắt đầu từ i và nhảy 2^k bước
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> S;
for (int i = 1; i <= n; i++) {
cin >> a[i];
a[i + n] = a[i];
}
for (int i = 1; i <= 2 * n; i++) pref[i] = pref[i - 1] + a[i];
// nxt[0][i] = vị trí j đầu tiên sao cho sum(i..j) > S
for (int i = 1; i <= 2 * n; i++) {
int j = upper_bound(pref + i, pref + 2 * n + 1, pref[i - 1] + S) - pref;
nxt[0][i] = j;
}
nxt[0][2 * n + 1] = 2 * n + 1; // tường chắn
for (int k = 1; k <= 17; k++) {
for (int i = 1; i <= 2 * n + 1; i++) {
nxt[k][i] = nxt[k - 1][nxt[k - 1][i]];
}
}
// Giả sử ta chọn điểm xuất phát là i
// => Đoạn cần xét là [cur, last] = [i, i + n - 1]
// Khi đó, (số bước nhảy tối đa có thể nhảy từ cur sao cho không vượt quá vị trí last) + 1
// cũng chính là đáp án ta cần tìm của đoạn đấy
int best = INF;
for (int i = 1; i <= n; i++) {
int ans = 0;
int cur = i, last = i + n - 1;
for (int k = 17; k >= 0; k--) {
if (nxt[k][cur] <= last) {
ans += (1 << k);
cur = nxt[k][cur];
}
}
ans = ans + 1; // đoạn còn dư ra
best = min(best, ans);
}
cout << best << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDJlNSArIDU7IAoKaW50IG47IGxsIFM7IAppbnQgYVsyICogTl07IApsbCBwcmVmWzIgKiBOXTsgCmludCBueHRbMThdWzIgKiBOXTsgLy8gbnh0W2tdW2ldID0gduG7iyB0csOtIG3DoCB0YSBuaOG6o3kgxJHhur9uIG7hur91IGLhuq90IMSR4bqndSB04burIGkgdsOgIG5o4bqjeSAyXmsgYsaw4bubYwoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgIAkKCWNpbiA+PiBuID4+IFM7IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJY2luID4+IGFbaV07IAoJCWFbaSArIG5dID0gYVtpXTsgCgl9CgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gMiAqIG47IGkrKykgcHJlZltpXSA9IHByZWZbaSAtIDFdICsgYVtpXTsgCgoJLy8gbnh0WzBdW2ldID0gduG7iyB0csOtIGogxJHhuqd1IHRpw6puIHNhbyBjaG8gc3VtKGkuLmopID4gUyAgCglmb3IgKGludCBpID0gMTsgaSA8PSAyICogbjsgaSsrKSB7CgkJaW50IGogPSB1cHBlcl9ib3VuZChwcmVmICsgaSwgcHJlZiArIDIgKiBuICsgMSwgcHJlZltpIC0gMV0gKyBTKSAtIHByZWY7ICAKCQlueHRbMF1baV0gPSBqOyAKCX0KCW54dFswXVsyICogbiArIDFdID0gMiAqIG4gKyAxOyAvLyB0xrDhu51uZyBjaOG6r24KCglmb3IgKGludCBrID0gMTsgayA8PSAxNzsgaysrKSB7CgkJZm9yIChpbnQgaSA9IDE7IGkgPD0gMiAqIG4gKyAxOyBpKyspIHsKCQkJbnh0W2tdW2ldID0gbnh0W2sgLSAxXVtueHRbayAtIDFdW2ldXTsgCgkJfQoJfQoKCS8vIEdp4bqjIHPhu60gdGEgY2jhu41uIMSRaeG7g20geHXhuqV0IHBow6F0IGzDoCBpIAoJLy8gPT4gxJBv4bqhbiBj4bqnbiB4w6l0IGzDoCBbY3VyLCBsYXN0XSA9IFtpLCBpICsgbiAtIDFdIAoJLy8gS2hpIMSRw7MsIChz4buRIGLGsOG7m2MgbmjhuqN5IHThu5FpIMSRYSBjw7MgdGjhu4MgbmjhuqN5IHThu6sgY3VyIHNhbyBjaG8ga2jDtG5nIHbGsOG7o3QgcXXDoSB24buLIHRyw60gbGFzdCkgKyAxIAoJLy8gY8WpbmcgY2jDrW5oIGzDoCDEkcOhcCDDoW4gdGEgY+G6p24gdMOsbSBj4bunYSDEkW/huqFuIMSR4bqleQoJaW50IGJlc3QgPSBJTkY7IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJaW50IGFucyA9IDA7CgkJaW50IGN1ciA9IGksIGxhc3QgPSBpICsgbiAtIDE7ICAKCQlmb3IgKGludCBrID0gMTc7IGsgPj0gMDsgay0tKSB7CgkJCWlmIChueHRba11bY3VyXSA8PSBsYXN0KSB7CgkJCQlhbnMgKz0gKDEgPDwgayk7ICAKCQkJCWN1ciA9IG54dFtrXVtjdXJdOyAKCQkJfQoJCX0gCgkJYW5zID0gYW5zICsgMTsgLy8gxJFv4bqhbiBjw7JuIGTGsCByYQoJCWJlc3QgPSBtaW4oYmVzdCwgYW5zKTsgIAoJfQoKCWNvdXQgPDwgYmVzdCA8PCAnXG4nOyAKfQ==