← Home
package main

import (
	"bufio"
	"io"
	"math/bits"
	"os"
	"strconv"
)

func nextUint(data []byte, idx *int) uint64 {
	n := len(data)
	for *idx < n && (data[*idx] < '0' || data[*idx] > '9') {
		*idx++
	}
	var x uint64
	for *idx < n && data[*idx] >= '0' && data[*idx] <= '9' {
		x = x*10 + uint64(data[*idx]-'0')
		*idx++
	}
	return x
}

func reaches(i uint64, rev []uint64, k uint64) bool {
	var sum uint64
	t := uint64(1)
	m := len(rev)

	for d, a := range rev {
		if a != 0 {
			rem := k - sum
			hi, lo := bits.Mul64(t, a)
			if hi != 0 || lo >= rem {
				return true
			}
			sum += lo
		}

		if t == k && d+1 < m {
			return true
		}

		if d+1 < m && t < k {
			num := i + uint64(d)
			den := uint64(d + 1)
			hi, lo := bits.Mul64(t, num)
			if hi >= den {
				t = k
			} else {
				q, _ := bits.Div64(hi, lo, den)
				if q >= k {
					t = k
				} else {
					t = q
				}
			}
		}
	}

	return false
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0

	n := int(nextUint(data, &idx))
	k := nextUint(data, &idx)

	a := make([]uint64, n)
	var maxv uint64
	left := n

	for i := 0; i < n; i++ {
		v := nextUint(data, &idx)
		a[i] = v
		if v > maxv {
			maxv = v
		}
		if v > 0 && left == n {
			left = i
		}
	}

	w := bufio.NewWriterSize(os.Stdout, 32)
	defer w.Flush()

	if maxv >= k {
		w.WriteString("0\n")
		return
	}

	m := n - left
	rev := make([]uint64, m)
	for i := 0; i < m; i++ {
		rev[i] = a[n-1-i]
	}

	l, r := uint64(1), k
	for l < r {
		mid := l + (r-l)/2
		if reaches(mid, rev, k) {
			r = mid
		} else {
			l = mid + 1
		}
	}

	w.WriteString(strconv.FormatUint(l, 10))
	w.WriteByte('\n')
}