unittest
{
	assert( [ "5 3", "0 2 1 4 3" ].parse.expand.solve == 2 );
	assert( [ "4 4", "0 1 2 3" ].parse.expand.solve == 1 );
	assert( [ "10 4", "2 0 1 3 7 5 4 6 8 9" ].parse.expand.solve == 6 );
	
	assert( [ "10 4", "2 0 1 3 5 7 4 6 8 9" ].parse.expand.solve == 5 );		// 追加ケース
}



import std.container;
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 ps = input.front.split.to!( long[] );
	return tuple( nk[ 1 ], ps );
}

auto solve( long k, long[] ps )
{
	auto ans = 1L;
	
	// 一つ前の順列と一致するか判定
	auto rbt = redBlackTree( ps[ 0 .. k ] );
	foreach( i; 0L .. ps.length.signed - k )
	{
		ans += !( ps[ i ] == rbt.front && rbt.back < ps[ i + k ] );
		rbt.removeKey( ps[ i ] );
		rbt.insert( ps[ i + k ] );
	}
	
	// 最初から昇順の区間の重複カウントを除外
	auto t = 0L;
	auto c = 0L;
	foreach( i; 0L .. ps.length.signed - 1 )
	{
		if( ps[ i ] < ps[ i + 1 ] ) c++;
		else                        c = 0;
		if( c == k - 1 ) t++;
	}
	if( 2 <= t ) ans -= t - 1;
	
	return ans;
}
