#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;
const int LOG = 18;
int n; ll S;
int a[2 * N];
ll pref[2 * N];
int nxt[LOG][2 * N]; // nxt[k][i] = Vị trí mà ta sẽ nhảy đến nếu bắt đầu từ i và nhảy 2^k bước
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
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 nhỏ nhất >= i sao cho sum(i..j) > S
// <=> pref[j] - pref[i - 1] > S
// <=> pref[j] > pref[i - 1] + S
// Ta có mảng pref tăng nghiêm ngặt vì các phần tử của a đều dương
// Do đó ta có thể áp dụng tìm kiếm nhị phân để tìm j
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 < LOG; 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 = LOG - 1; 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';
}