Problem: For a given array $a_1, a_2, a_3, ... , a_N$ of $N$ elements and an integer $K$, find the smallest sub-array size (smallest window length) where the elements in the sub-array contains all integers in range [$1, 2, ..., K$]. If there is no such sub-array, report 0.

Constraints

* $1 \leq N \leq 10^5$
* $1 \leq K \leq 10^5$
* $1 \leq a_i \leq 10^5$

Input

The input is given in the following format.

$N$ $K$
$a_1$ $a_2$ ... $a_N$

Output

Print the smallest sub-array size in a line.

Examples

Input

6 2
4 1 2 1 3 5


Output

2


Input

6 3
4 1 2 1 3 5


Output

3


Input

3 4
1 2 3


Output

0

Solution (in CPP):

Solution:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<utility>
#include<vector>
#include<queue>
#include<functional>
#include<map>
#include<set>
#include<cstring>
#include<string>
#include<stack>
#include<stdlib.h>
#include<math.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
typedef pair<int, char> pic;
typedef priority_queue<pii, vector<pii>, greater<pii> > RPQ;
#define mk make_pair
#define INF (1ll << 30ll)
#define INFL (1ll << 60ll)
#define mod 1000000007

int N, K, a[100100];
int c[100100];

int add(int x){
    if(x > K)return 0;
    if(c[x]++){
        return 0;
    }
    else {
        return 1;
    }
}

int remove(int x){
    if(x > K)return 0;
    if(--c[x]){
        return 0;
    }
    else {
        return -1;
    }
}

int remove_flag(int x){
    if(x > K)return 0;
    if(c[x] - 1){
        return 0;
    }
    else {
        return -1;
    }
}

signed main(){
    cin >> N >> K;
    for(int i = 0; i < N; i++){
        cin >> a[i];
    }
    int l = 0, r = 0, s = 0;
    int ans = INF;
    for(r = 0; r < N; r++){
        s += add(a[r]);
        if(s < K){
            continue;
        }
        while(l <= r && s + remove_flag(a[l]) == K){
            s += remove(a[l]);
            l++;
        }
        ans = min(ans, r - l + 1);
    }
    cout << ans % INF << endl;

    return 0;
}

/*


*/