N,M = map(int,input().split())
lsA = list(map(int,input().split()))
# 鉱石をならす
def is_ok(arg):
    rem = 0
    for i in range(N):
        if lsA[i]+rem>=M*arg:
            rem = lsA[i]+rem-M*arg
        else:
            return False
    return True
 
 
def meguru_bisect(ng, ok):
    while (abs(ok - ng) > 1):
        mid = (ok + ng) // 2
        if is_ok(mid):
            ok = mid
        else:
            ng = mid
    return ok
print(meguru_bisect(10**18+1,0))