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<vector>
#include<algorithm>
#include<utility>
#include<numeric>
#include<iostream>
#include<array>
#include<string>
#include<sstream>
#include<stack>
#include<queue>
#include<list>
#include<functional>
#define _USE_MATH_DEFINES

#include<math.h>
#include<map>

#define SENTINEL 1000000001

#define min(a,b) ((a)>(b)?(b):(a))
#define max(a,b) ((a)>(b)?(a):(b))

using namespace std;

typedef pair<int, int> pii;

int a[100010];
int c[100010];

int main() {
	int N, S;
	scanf("%d %d", &N, &S);

	for (int i = 0; i < N; i++)
	{
		scanf("%d", &a[i]);
	}

	int l = 0, r = -1, L = 10000000;
	int t = 0;
	
	while (r < N)
	{
		if (t == S)
		{
			L = min(L, (r - l) + 1);
			if (L == S)
			{
				break;
			}
			if (a[l] <= S)
			{
				c[a[l]]--;
				if (c[a[l]] == 0)
				{
					t--;
				}
			}
			l++;
		}
		else
		{
			r++;
			if (a[r] <= S)
			{
				c[a[r]]++;
				if (c[a[r]] == 1)
				{
					t++;
				}
			}
		}
	}

	printf("%d\n", L == 10000000 ? 0 : L);
}