from itertools import accumulate

from collections import defaultdict

N, K = list(map(int, input().split()))

A = [0] + [a-1 for a in map(int, input().split())]

A_cum = list(accumulate(A))

A_cum = [a%K for a in A_cum]



ans = 0

dd = defaultdict(int)

q = []

for j in range(N+1):  

  ans += dd[A_cum[j]]

  dd[A_cum[j]] += 1

  q.append(A_cum[j])

  if len(q) == K:

    dd[q[0]] -= 1

    q.pop(0)

print(ans)    

  





from itertools import accumulate

from collections import defaultdict, deque

def resolve():

    N, K = list(map(int, input().split()))

    A = list(map(int, input().split()))

    A = accumulate([a % K for a in A])

    A = [0] + list(A)



    # 区間 [i,j] の和(累積和): dj+1−di

    # 区間 [i,j] の要素の数(0_indの為 +1): j−i+1

    # 上記を一般化:  dr−dl=r−l となるものの個数を求める

    # r−l<K  の時、mod K において式変形が成り立つ, dr−r=dl−l

    # rを固定し辞書で管理すれば、dl−lと同じ値なので個数を求められる。



    cnt = defaultdict(int)

    q = deque()

    ans = 0

    for r in range(N + 1):

        t = (A[r] - r) % K

        ans += cnt[t]

        cnt[t] += 1



        q.append(t)

        if len(q) == K:

            left = q.popleft()

            cnt[left] -= 1



    print(ans)





if __name__ == "__main__":

    resolve()

from itertools import accumulate
from collections import defaultdict

N, K = list(map(int, input().split()))
A = [0] + [a - 1 for a in map(int, input().split())]
A_cum = list(accumulate(A))
A_cum = [a % K for a in A_cum]
ans = 0
dd = defaultdict(int)
q = []
for j in range(N + 1):
    ans += dd[A_cum[j]]
    dd[A_cum[j]] += 1
    q.append(A_cum[j])
    if len(q) == K:
        dd[q[0]] -= 1
        q.pop(0)
print(ans)

from itertools import accumulate
from collections import defaultdict, deque


def resolve():
    N, K = list(map(int, input().split()))
    A = list(map(int, input().split()))
    A = accumulate([a % K for a in A])
    A = [0] + list(A)
    # 区間 [i,j] の和(累積和): dj+1−di
    # 区間 [i,j] の要素の数(0_indの為 +1): j−i+1
    # 上記を一般化:  dr−dl=r−l となるものの個数を求める
    # r−l<K  の時、mod K において式変形が成り立つ, dr−r=dl−l
    # rを固定し辞書で管理すれば、dl−lと同じ値なので個数を求められる。
    cnt = defaultdict(int)
    q = deque()
    ans = 0
    for r in range(N + 1):
        t = (A[r] - r) % K
        ans += cnt[t]
        cnt[t] += 1
        q.append(t)
        if len(q) == K:
            left = q.popleft()
            cnt[left] -= 1
    print(ans)


if __name__ == "__main__":
    resolve()

-from collections import defaultdict +from collections import defaultdict, deque -N, K = list(map(int, input().split())) -A = [0] + [a - 1 for a in map(int, input().split())] -A_cum = list(accumulate(A)) -A_cum = [a % K for a in A_cum] -ans = 0 -dd = defaultdict(int) -q = [] -for j in range(N + 1): -    ans += dd[A_cum[j]] -    dd[A_cum[j]] += 1 -    q.append(A_cum[j]) -    if len(q) == K: -        dd[q[0]] -= 1 -        q.pop(0) -print(ans) + +def resolve(): +    N, K = list(map(int, input().split())) +    A = list(map(int, input().split())) +    A = accumulate([a % K for a in A]) +    A = [0] + list(A) +    # 区間 [i,j] の和(累積和): dj+1−di +    # 区間 [i,j] の要素の数(0_indの為 +1): j−i+1 +    # 上記を一般化:  dr−dl=r−l となるものの個数を求める +    # r−l<K  の時、mod K において式変形が成り立つ, dr−r=dl−l +    # rを固定し辞書で管理すれば、dl−lと同じ値なので個数を求められる。 +    cnt = defaultdict(int) +    q = deque() +    ans = 0 +    for r in range(N + 1): +        t = (A[r] - r) % K +        ans += cnt[t] +        cnt[t] += 1 +        q.append(t) +        if len(q) == K: +            left = q.popleft() +            cnt[left] -= 1 +    print(ans) + + +if __name__ == "__main__": +    resolve()