#include <fstream>
std::ifstream f1("secv.in");
std::ofstream f2("secv.out");
void mergesort(long sir[5000], int jos, int sus);
void merge(long sir[5000], int jos, int mij, int sus);
int bsearch(long s[5000], int jos, int sus, long x);
int main()
{
int n, i, j, poz, m, min;
long sir[5000], subsir[5000], a[5000];
f1>>n;
for (i=0; i<n; i++)
{
f1>>sir[i];
subsir[i]=sir[i];
}//for i
mergesort(subsir, 0, n-1);
i=1;
j=1;
while (j<n)
{
while ((j<n)&&(subsir[i-1]==subsir[j]))
j++;
if (j<n)
{
subsir[i]=subsir[j];
i++;
}//if
}//while
m=i;
min=6000;
for (i=0; i<n; i++)
{
poz=bsearch(subsir, 0, m-1, sir[i]);
if (poz==0)
a[i]=1;
else
{
j=i;
while ((j>0)&&(sir[j]!=subsir[poz-1]))
j--;
if ((sir[j]==subsir[poz-1])&&(a[j]>0))
a[i]=a[j]+i-j;
else
a[i]=0;
}//else
if ((poz==(m-1))&&(a[i]>0)&&(min>a[i]))
min=a[i];
}//for i
if (min==6000)
f2<<-1;
else
f2<<min;
f1.close();
f2.close();
return 0;
}//main
void mergesort(long sir[5000], int jos, int sus)
{
if (jos<sus)
{
int mij=(jos+sus)/2;
mergesort(sir, jos, mij);
mergesort(sir, mij+1, sus);
merge(sir, jos, mij, sus);
}//if
}//mergesort
void merge(long sir[5000], int jos, int mij, int sus)
{
int i1=jos, i2=mij+1, ib=jos, i;
long b[5000];
while ((i1<=mij)&&(i2<=sus))
{
if (sir[i1]<sir[i2])
{
b[ib]=sir[i1];
i1++;
}//if
else
{
b[ib]=sir[i2];
i2++;
}//else
ib++;
}//while
for (i=i1; i<=mij; i++)
b[ib+i-i1]=sir[i];
for (i=i2; i<=sus; i++)
b[ib+i-i2]=sir[i];
for (i=jos; i<=sus; i++)
sir[i]=b[i];
}//merge
int bsearch(long s[5000], int jos, int sus, long x)
{
int mij=(jos+sus)/2;
if (x<s[mij])
return bsearch(s, jos, mij-1, x);
else
if (x>s[mij])
return bsearch(s, mij+1, sus, x);
else
return mij;
}//bsearch