#include <bits/stdc++.h>
using namespace std;
int n;
long long int k;
deque<long long int> d;
long long int ar[210000];
long long int ppow(long long int i, long long int j) {
  long long int res = 1LL;
  while (j) {
    if ((j & 1LL)) {
      res *= i;
      if (res >= 1000000007) {
        res %= 1000000007;
      }
    }
    j >>= 1;
    i *= i;
    if (i >= 1000000007) {
      i %= 1000000007;
    }
  }
  return res;
}
long long int C(long long int A, long long int B) {
  long long int res = 1;
  for (int i = 0; i < B; i++) {
    res *= (A - i);
    res %= 1000000007;
  }
  long long int res2 = 1;
  for (int i = 1; i <= B; i++) {
    res2 *= i;
    res2 %= 1000000007;
  }
  res *= ppow(res2, 1000000007 - 2);
  res %= 1000000007;
  return res;
}
bool ok(long long int mid) {
  long long int w = d[2];
  w += d[1] * mid;
  if (w >= k) return true;
  if ((1LL + mid) * mid / 2LL >= k) {
    return true;
  }
  long long int point = (1LL + mid) * mid / 2LL;
  long long int need = k - w;
  need += point - 1;
  need /= point;
  if (need <= d[0]) {
    return true;
  }
  return false;
}
int main() {
  scanf("%d", &n);
  scanf("%lld", &k);
  int pos = 0;
  long long int mx = 0;
  for (int i = 0; i < n; i++) {
    long long int A;
    scanf("%lld", &A);
    if (A) {
      pos++;
    }
    d.push_back(A);
    mx = max(mx, A);
  }
  while (d.front() == 0) {
    d.pop_front();
  }
  n = d.size();
  if (mx >= k) {
    puts("0");
    return 0;
  }
  if (n == 2) {
    k -= d.back();
    k += d[0] - 1;
    k /= d[0];
    printf("%lld\n", k);
    return 0;
  }
  if (n == 3) {
    long long int mint = 0;
    long long int maxt = 2000000000LL;
    while (mint + 1LL < maxt) {
      if (ok((mint + maxt) >> 1LL)) {
        maxt = (mint + maxt) >> 1LL;
      } else {
        mint = (mint + maxt) >> 1LL;
      }
    }
    if (ok(mint)) {
      maxt = mint;
    }
    printf("%lld\n", maxt);
    return 0;
  }
  for (int i = 0; i < d.size(); i++) {
    ar[i] = d[i];
  }
  int siz = d.size();
  int op = 0;
  while (1) {
    for (int i = 0; i < siz; i++) {
      if (ar[i] >= k) {
        printf("%d\n", op);
        return 0;
      }
    }
    for (int i = 1; i < siz; i++) {
      ar[i] += ar[i - 1];
    }
    op++;
  }
  return 0;
}
