#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=1500100;
const int inf=0x3f3f3f3f;
int tree[maxn<<2];//维护个数，初始全部为0；
int vis[maxn];
int num[maxn];
int n,m;
void add(int tis,int l,int r,int tp,int k)
{
    if(l==r){
       vis[l]+=k;
       if(vis[l])tree[tis]=inf;
        else tree[tis]=l;
    }
    else{
        int mid=(r+l)>>1;
        if(tp<=mid)add(tis<<1,l,mid,tp,k);
        if(tp>=mid+1)add(tis<<1|1,mid+1,r,tp,k);
        tree[tis]=min(tree[tis<<1],tree[tis<<1|1]);
    }
}
void build(int tis,int l,int r){
    if(l==r){
        tree[tis]=l;
    }
    else {
        int mid=(l+r)>>1;
        build(tis<<1,l,mid);
        build(tis<<1|1,mid+1,r);
        tree[tis]=min(tree[tis<<1],tree[tis<<1|1]);
    }

}
int main()
{

    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&num[i]);
    }
    build(1,1,n+1);
    for(int i=1;i<=m;i++){
        add(1,1,n+1,num[i]+1,1);
    }
    int small=tree[1]-1;
    for(int i=2;i<=n-m+1;i++){
        add(1,1,n+1,num[i+m-1]+1,1);
        add(1,1,n+1,num[i-1]+1,-1);
        if(small>tree[1]-1){
            small=tree[1]-1;
        }
    }
    printf("%d\n",small);
}


#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
 
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;
 
typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;
 
typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;
 
#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
#define trav(a,x) for (auto& a : x)
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)
 
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template<class T> bool ckmin(T& a, const T& b) { return b < a ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
const int MOD = 1000000007;
const char nl = '\n';
const int MX = 100001; //check the limits, dummy

void solve() {

    int N, M; cin >> N >> M;
    int cnt[N]; F0R(i, N) cnt[i] = 0;
    set<int> av;
    F0R(i, N) av.ins(i);
    av.ins(N);
    int A[N]; F0R(i, N) cin >> A[i];
    F0R(i, M) {
        cnt[A[i]]++; av.erase(A[i]);
    }
    int ans = *av.begin();
    FOR(i, M, N) {
        cnt[A[i-M]]--;
        if (cnt[A[i-M]] == 0) av.ins(A[i-M]);
        cnt[A[i]]++;
        av.erase(A[i]);
        ckmin(ans, *av.begin());
    }
    cout << ans << nl;

}
 
int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);    

    int T = 1;
//    cin >> T;
    while(T--) {
        solve();
    }

	return 0;
}
 
// read the question correctly (ll vs int)
// template by bqi343

