unittest
{
	assert( [ "5 4", "1 4 2 3 5" ].parse.expand.solve == 4 );
	assert( [ "8 4", "4 2 4 2 4 2 4 2" ].parse.expand.solve == 7 );
	assert( [ "10 7", "14 15 92 65 35 89 79 32 38 46" ].parse.expand.solve == 8 );
	
	assert( [ "200000 1000000000", "1".repeat( 200000 ).join( " " ) ].parse.expand.solve == 20000100000 );		// 追加ケース
}



import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto nk = input.front.split.to!( long[] );
	input.popFront;
	auto as = input.front.split.to!( long[] );
	return tuple( nk[ 1 ], as );
}

auto solve( long k, long[] as )
{
	// 累積和表を作成
	auto ts = new long[ 1 + as.length ];
	foreach( i, a; as )
	{
		ts[ i + 1 ] = ts[ i ] + a;
	}
	
	// 部分列の条件は i < j かつ j - i < k かつ ( ts[ j ] - ts[ i ] ) % k == j - i なので、
	// ⇒ ( ts[ j ] - ts[ i ] ) % k - j + i == 0
	// ⇒ ( ( ts[ j ] - j ) - ( ts[ i ] + i ) ) % k == 0
	// ⇒ ( ts[ j ] - j ) % k == ( ts[ i ] - i ) % k
	// にできる。
	
	// 余りの値ごとに i を分類
	long[][ long ] pss;		// 通常配列だとkがでかすぎて死ぬ
	foreach( i, ref t; ts )
	{
		pss[ ( t - i ) % k ] ~= i.signed;
	}
	
	// i < j かつ j - i < k かつ 余りの値が同じ になるペアの数をしゃくとり法で計算
	auto ans = 0L;
	foreach( ps; pss )
	{
		for( auto l = 0L, r = 0L; l < ps.length; l++ )
		{
			while( r < ps.length && ps[ r ] - ps[ l ] < k ) r++;
			ans += r - l - 1;
		}
	}
	return ans;
}
