#include <bits/stdc++.h>
long long amul(long long x, long long y, long long a) {
  if (x == (1LL << 61LL) || y == (1LL << 61LL) || a == (1LL << 61LL) ||
      (x != 0 && (1LL << 61LL) / x <= y) || x * y + a >= (1LL << 61LL)) {
    return (1LL << 61LL);
  }
  return x * y + a;
}
int main(void) {
  int n;
  long long k;
  long long a[(3 * 100 * 1000)];
  long long m = -1;
  bool in_zero_prefix = true;
  scanf("%d %lld", &n, &k);
  for (int i = 0; i < n; i++) {
    scanf("%lld", &a[i]);
    m = std::max(m, a[i]);
    if (a[i] == 0) {
      if (in_zero_prefix) {
        i--;
        n--;
      }
    } else {
      in_zero_prefix = false;
    }
  }
  if (m >= k) {
    puts("0");
  } else if (n >= 10) {
    long long b[(3 * 100 * 1000)];
    auto p = a, q = b;
    int z;
    for (z = 1;; z++) {
      for (int i = 0; i < n; i++) {
        q[i] = amul(1, p[i], (i == 0) ? 0 : q[i - 1]);
      }
      if (q[n - 1] >= k) {
        break;
      }
      std::swap(p, q);
    }
    printf("%d\n", z);
  } else {
    long long coefficient[1 + 60][10];
    for (int i = 0; i < n; i++) {
      coefficient[0][i] = 1;
    }
    for (int i = 1; i <= 60; i++) {
      for (int j = 0; j < n; j++) {
        coefficient[i][j] = 0;
        for (int w = 0; w <= j; w++) {
          coefficient[i][j] = amul(coefficient[i - 1][j - w],
                                   coefficient[i - 1][w], coefficient[i][j]);
        }
      }
    }
    long long b[(3 * 100 * 1000)];
    auto p = a, q = b;
    long long result = 0;
    for (int i = 60; i >= 0; i--) {
      memset(q, 0, sizeof(b));
      for (int j = 0; j < n; j++) {
        for (int w = 0; j + w < n; w++) {
          q[j + w] = amul(p[j], coefficient[i][w], q[j + w]);
        }
      }
      if (q[n - 1] < k) {
        result += (1LL << i);
        std::swap(p, q);
      }
    }
    printf("%lld\n", result + 1);
  }
  return 0;
}
