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<stdio.h>
#include<vector>
#include<iostream>
#include<functional>

using namespace std;
typedef long long ll;
#define REP(i,n) for(int i=0;i<(int)(n);i++)

int main(){
    ll n,k,x;
    vector<ll> list;
    cin >> n >> k;
    REP(i,n){
        cin >> x;
        list.push_back(x-1);
    }
    ll l=0, r=0;
    ll ans = 1<<30;
    std::vector<ll> stat; stat.assign(k, 0);
    ll sum=0;
    for(l=0; l<n; l++){
        if(l!=0)if(list[l-1]<k){
            if(stat[list[l-1]]==1) sum--;
            stat[list[l-1]]--;
        }
        if(r<l){ r=l; stat.clear(); sum=0; }
        while(sum < k && r<n){
            if(list[r]<k){
                if(stat[list[r]]==0) sum++;
                stat[list[r]]++;
            }
            r++;
        }
        /*
        cout << "###" << l << " " << r;
        REP(i,k) cout << ":" << stat[k];
        cout << " " << ans << endl;*/
        if(sum >= k)if(ans > r-l) ans = r-l;
    }
    if(ans == 1<<30) cout << "0" << endl;
    else cout << ans << endl;
}