#include <iostream>
#include <stdio.h>
#include <stdlib.h> //rand() 0~RAND_MAX2147483647
#include <math.h>
#include <time.h>   //srand((unsigned int)time(NULL));
#include <unistd.h> //sleep
#include <algorithm>
#include <cmath>
#include <vector>
#include <regex> //正規表現
#include <map>
#include <unordered_map>
#include <set>
#include <cassert> //assart
#include <numeric>
#include <iterator>
#include <list>
#include <tuple>
#include <queue>

using namespace std;
#define ll long long int
#define FOR(i,min,max) for(int i=(min);i<(max);i++)
#define FOReq(i,min,max) for(int i=(min);i<=(max);i++)
#define FORREV(i,max,min) for(int i=(max)-1;i>=(min);i--)
#define FORREVeq(i,max,min) for(int i=(max);i>=(min);i--)
const int MOD=1e9+7;
const int MOD2=998244353;
const int not0=1;
const int INF=2000000001;
const ll INFll=2e18;
//const int MAX_V=10000;
const double  Micro=1e-5;

int UnUsedVariable(){
    if(INF || Micro || MOD || INFll || MOD2 || not0){;}
    return 0;
}

#define pf printf
#define sf scanf
#define inarray(array,min,max) FOR(i,min,max){cin>>array[i];}
#define inarrayW(arrayA,arrayB,min,max) FOR(i,min,max){cin>>arrayA[i]>>arrayB[i];}
#define br printf("\n");
#define OutputAndReturn0(x) {cout<<(x)<<endl;return 0;}
#define elif else if

#define issame(a,b,c,d) ((a)==(b) and (b)==(c) and (c)==(d))
#define isdiff3(a,b,c) ((a)!=(b) and (b)!=(c) and (c)!=(a))
#define isdiff4(a,b,c,d) ((a)!=(b) and (b)!=(c) and (c)!=(a) and (d)!=(a) and (d)!=(b) and (d)!=(c))
#define isdiff5(a,b,c,d,e) ((a)!=(b) and (b)!=(c) and (c)!=(a) and (d)!=(a) and (d)!=(b) and (d)!=(c) and (e)!=(a) and (e)!=(b) and (e)!=(c) and (e)!=(d))
#define Func3(f,a,b,c) (f)((f)((a),(b)),(c))
#define Func4(f,a,b,c,d) (f)((f)((f)((a),(b)),(c)),(d))

inline int isEven(int x){return x%2==0;}
inline int isOdd (int x){return x%2==1;}
inline ll  gcd(ll a,ll b){ if(b==0)return a;else return gcd(b,a%b);}//最大公約数 なお一方が0なら答えは他方になるので番兵は０で良い また、負の数もOK -4%3=-1となるため
inline ll  lcm(ll a,ll b){return a*b/gcd(a,b);}//MODやオーバーフローには注意！
//inline ll  ceil(double a){return (ll)a+1;}
//ans = accumulate(A, A+N, 0, [](int a, int b) {return gcd(a,b);});
//auto count = std::count_if(v.begin(), v.end(), [](int x) { return x == 1 || x == 3; } );




//Eと名のつくのはデバッグ用！
int EintN(ll array[],const ll num){
    for(int i=0;i<num;i++){cerr<<array[i]<<" ";}
    br;
    return 0;
}
//int EintNN(const int heighth,const int width,int array[heighth][width]){
//    FOR(i, 0, heighth){
//        FOR(k, 0, width){
//            {cerr<<array[i][k]<<" ";}
//        }
//        br;
//    }
//    br;
//    return 0;
//}
int Eint(string str,const ll num){
    cerr<<str<<" is "<<num<<" now."<<endl;
    return 0;
}















ll probA(){
    int ans;ans=0;
    int H,W,eachHmin,eachWmin;
    cin>>H>>W>>eachHmin>>eachWmin;
    
    int array[H][W];
    FOR(i, 0, H){
        FOR(k, 0, W){
            array[i][k]=0;
        }
    }
    /*
    if(H==1){
        FOR(i, 0, eachHmin){array[0][i]=1;}
        goto w;
    }
    if(W==1){
        FOR(i, 0, eachWmin){array[i][0]=1;}
        goto w;
    }
    */
    //if(H*eachHmin!=W*eachWmin){OutputAndReturn0("No")}
    
    FOR(i, 0, H){
        FOR(k, 0, W){
            if(i<eachWmin){
                array[i][k]=(k<eachHmin);
            }
            else{
                array[i][k]=1-(k<eachHmin);
            }
        }
    }
    
    
    w:
    
    FOR(i, 0, H){
        FOR(k, 0, W){
            cout<<array[i][k];
        }
        cout<<"\n";
    }
    return 0;
    
    
    
    //OutputAndReturn0(ans)
    //return 0;
}

ll probB(){
    int ans;ans=0;
    int N,K;
    cin>>N>>K;
    int P[N];
    inarray(P, 0, N);
    set<int> S;
    
    int increasenum=1;
    FOR(i, 0, K){
        S.insert(P[i]);
        if(i>0){
            if(P[i-1]<P[i])increasenum++;
            else increasenum=1;
        }
    }
    
    
    ans=N-K+1;
    bool NoChangeWasDone=false;
    if(increasenum>=K)NoChangeWasDone=true;
    
    FOR(m, 0, N-K){
        bool AnsMinusFlag=false;
        S.insert(P[K+m]);
        
        if(P[K+m-1]<P[K+m])increasenum++;
        else increasenum=1;
        
        if(increasenum>=K && NoChangeWasDone)AnsMinusFlag=true;
        if(increasenum>=K)NoChangeWasDone=true;
        
        
        
        //cout<<*S.begin()<<"  "<<P[m]<<"  "<<*(--S.end())<<"  "<<P[K+m]<<"\n";
        if(*S.begin()==P[m] && *(--S.end())==P[K+m])AnsMinusFlag=true;
        S.erase(P[m]);
        
        if(AnsMinusFlag)ans--;
    }
    
    OutputAndReturn0(ans)
    return 0;
}

ll probC(){
    int ans;ans=0;
    OutputAndReturn0(ans)
    return 0;
}

ll probD(){
    ll ans;ans=0;
    OutputAndReturn0(ans);
    return 0;
}

ll probE(){
    int ans;ans=0;
    OutputAndReturn0(ans);
    return 0;
}

ll probF(){
    int ans;ans=0;
    OutputAndReturn0(ans);
    return 0;
}

signed main(){
    cin.tie(0);    //cinとcoutの結び付き解除（cout時にcinの内容を吐き出さなくなる）
    ios::sync_with_stdio(false);  //coutとprintfの結び付き解除（coutとprintfを同時に使うな！）
    probB();
    return 0;
}


Measured memory_bytes: 10368