#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
template <class T>
bool uin(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool uax(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
int solve();
int main() {
  srand(0);
  return solve();
}
const int C = 5;
int n;
long long k;
bool my_exception;
struct matrix {
  vector<vector<long long> > A;
  int n, m;
  matrix(int _n, int _m) {
    n = _n, m = _m;
    A.assign(n, vector<long long>(m));
  }
  matrix(){};
  long long *get(int i, int j) { return &A[i][j]; }
  matrix operator*(matrix B) {
    matrix C(n, B.m);
    for (int i = 0; i < (int)C.n; i++) {
      for (int j = 0; j < (int)C.m; j++) {
        for (int w = 0; w < (int)m; w++) {
          long long dx = A[i][w], dy = (*B.get(w, j));
          if (dx > 0 && dy > k / dx) {
            my_exception = true;
          }
          *C.get(i, j) += dx * dy;
          if (*C.get(i, j) >= k) {
            my_exception = true;
          }
        }
      }
    }
    return C;
  }
};
long long smallN(vector<long long> v, long long k) {
  int n = v.size();
  vector<long long> pw(1, 1ll);
  vector<matrix> order(1);
  order[0] = matrix(n, n);
  for (int i = 0; i < (int)n; i++) {
    for (int j = i; j < n; j++) {
      *order[0].get(i, j) = 1ll;
    }
  }
  matrix data(n, n);
  for (int i = 0; i < (int)n; i++) *data.get(0, i) = v[i];
  while (true) {
    matrix tmp = data * order.back();
    if (my_exception) break;
    tmp = order.back() * order.back();
    if (my_exception) break;
    order.push_back(tmp);
    pw.push_back(pw.back() * 2ll);
  }
  matrix res = data;
  long long answer = 0;
  for (int i = (int)order.size() - 1; i >= 0; i--) {
    my_exception = false;
    matrix tmp = res * order[i];
    if (!my_exception) {
      res = tmp;
      answer += pw[i];
    }
  }
  return answer + 1;
};
long long bigN(vector<long long> v, long long k) {
  int answer = 0;
  do {
    answer++;
    for (int i = 1; i < v.size(); i++) {
      v[i] += v[i - 1];
      if (v[i] >= k) {
        return answer;
      }
    }
  } while (v.back() < k);
}
bool check(vector<long long> v) {
  for (long long x : v) {
    if (x >= k) return true;
  }
  return false;
}
int solve() {
  vector<long long> v;
  cin >> n >> k;
  bool waspositive = false;
  for (int i = 0; i < (int)n; i++) {
    int x;
    cin >> x;
    if (waspositive || x > 0) {
      v.push_back(x);
      waspositive = true;
    }
  }
  long long answer = ((check(v))     ? 0
                      : v.size() < C ? smallN(v, k)
                                     : bigN(v, k));
  cout << answer;
  return 0;
}
