#include<iostream>
using namespace std;
int p[200000];
int flag[200000];
int main() {

	//A
	/*int h, w, a, b;
	cin >> h;
	cin >> w;
	cin >> a;
	cin >> b;

	int i, j, k;
	for (i = 0; i < h; i++) {
		for (j = 0; j < w; j++) {
			if ((i < b) && (j < a)) {
				cout << 1;
			}
			else if ((i >= b) && (j >= a)) {
				cout << 1;
			}
			else {
				cout << 0;
			}
		}
		cout << '\n';
	}

	return 0;*/
	//B
	long long int n, k;
	cin >> n;
	cin >> k;
	int mink = 200001;
	int mink2;
	int maxk2;
  	int dd = 331;
	int maxk = -1;
	int flagsum = 0;
	int idflag = 0;
	int i, j;
	int counter = 1;
	int mind[2000];
	int maxd[2000];
	for (i = 0; i < n; i++) {
		cin >> p[i];
		if (p[i] == i) {
			flag[i] = 0;
		}
		else {
			flag[i] = 1;
		}
		flagsum = flagsum + flag[i];
	}
	for (i = 0; i < 2000; i++) {
		mind[i] = 200001;
		maxd[i] = -1;
	}

	for (i = 0; i < n; i++) {
		if (p[i] < mind[(i - (i % dd)) / dd]) {
			mind[(i - (i % dd)) / dd] = p[i];
		}
		if (p[i] > maxd[(i - (i % dd)) / dd]) {
			maxd[(i - (i % dd)) / dd] = p[i];
		}
	}

	if (flagsum == 0) {
		cout << 1;
		return 0;
	}
	else {

		flagsum = 0;
		//最初のk個についてまずは最小と最大を取る
		for (i = 0; i < k; i++) {

			if (p[i] > maxk) {
				maxk = p[i];
			}
			if (p[i] < mink) {
				mink = p[i];
			}
			if (i < k - 1) {
				if (p[i] < p[i + 1]) {
					flagsum++;
				}
			}
		}
		if (flagsum == k - 1) {
			idflag++;
		}
		for (i = 0; i <= n - k - 1; i++) {
			if ((p[i] == mink) && (p[i + k] > maxk)) {
				//counter変化なし

				//mink取り直す
				mink2 = p[i + 1];
				for (j = i + 1; j <= i + k; j++) {

					if (p[j] == mink + 1) {
						mink2 = mink + 1;
						break;
					}
					if ((k > 100) &&  (j - (j % dd) >= i + 1) && (j - (j % dd) + dd - 1 <= j + k)) {
						if (mind[(j - (j % dd)) / dd] < mink2) {
							mink2 = mind[(j - (j % dd)) / dd];
						}
						j = j - (j % dd) + dd - 1;
					}
					else {
						if (p[j] < mink2) {
							mink2 = p[j];
						}
					}

				}
				mink = mink2;
				maxk = p[i + k];

			}
			else {
				if (p[i] < p[i + 1]) {
					flagsum--;
				}
				if (p[i + k - 1] < p[i + k]) {
					flagsum++;
				}
				if (flagsum == k - 1) {
					idflag++;
				}

				counter++;
				if (p[i] == maxk) {
					//maxk取り直す
					maxk2 = p[i + 1];
					for (j = i + 1; j <= i + k; j++) {

						if (p[j] == maxk - 1) {
							maxk2 = maxk - 1;
							break;
						}
						if ((k > 100) &&  (j - (j % dd) >= i + 1) && (j - (j % dd) + dd - 1 <= j + k)) {
							if (maxd[(j - (j % dd)) / dd] > maxk2) {
								maxk2 = maxd[(j - (j % dd)) / dd];
							}
							j = j - (j % dd) + dd - 1;
						}
						else {

							if (p[j] > maxk2) {
								maxk2 = p[j];
							}
						}
					}
					maxk = maxk2;
				}
				else if (p[i] == mink) {
					//mink取り直す
					mink2 = p[i + 1];
					for (j = i + 1; j <= i + k; j++) {

						if (p[j] == mink + 1) {
							mink2 = mink + 1;
							break;
						}
						if ((k > 100) &&  (j - (j % dd) >= i + 1) && (j - (j % dd) + dd - 1 <= j + k)) {
							if (mind[(j - (j % dd)) / dd] < mink2) {
								mink2 = mind[(j - (j % dd)) / dd];
							}
							j = j - (j % dd) + dd - 1;
						}
						else {
							if (p[j] < mink2) {
								mink2 = p[j];
							}
						}
					}
					mink = mink2;

				}
				if (p[i + k] > maxk) {
					maxk = p[i + k];
				}
				else if (p[i + k] < mink) {
					mink = p[i + k];
				}



			}

		}
		if (idflag > 1) {
			counter = counter - (idflag - 1);
		}
		cout << counter;
		//cout << '\n';
		//cout << idflag;
		return 0;

	}
}

Measured memory_bytes: 1792