#include <stdio.h>
#define MAXN 5000
int v[MAXN + 1], s[MAXN], m[MAXN + 1], st[MAXN + 1];
void qs(int st, int dr){
int i = st, j = dr, piv = s[(i + j) / 2], aux;
while(i <= j){
while(s[i] < piv) i++;
while(s[j] > piv) j--;
if(i <= j){
aux = s[i]; s[i] = s[j]; s[j] = aux;
i++; j--;
}
}
if(st < j) qs(st, j);
if(i < dr) qs(i, dr);
return ;
}
int caut(int x, int n){
int i = 0, pas = 1 << 12;
while(pas > 0){
if(i + pas <= n &&m[i + pas] != -1 && v[m[i + pas]] < x){
i += pas;
}
pas >>= 1;
}
return i;
}
int main(){
FILE *in = fopen("secv.in", "r");
int n,i;
fscanf(in, "%d", &n);
for(i = 0; i < n; i++){
fscanf(in, "%d", &v[i]);
s[i] = v[i];
m[i] = -1;
}
m[n] = -1;
fclose(in);
qs(0, n - 1);
int nr = 0, prev = -1;
for(i = 0; i < n; i++){
if(s[i] != prev){
prev = s[i];
nr++;
}
}
m[0] = n;
v[n] = -1;
int poz;
for(i = 0; i < n; i++){
poz = caut(v[i], n);
if(m[poz + 1] == -1 || (m[poz + 1] != -1 && v[m[poz + 1]] >= v[i])){
m[poz + 1] = i;
if(poz == 0) st[1] = i;
else st[poz + 1] = st[poz];
}
}
FILE *out = fopen("secv.out", "w");
if(m[nr] == -1) fprintf(out, "-1");
else fprintf(out, "%d", m[nr] - st[nr] + 1);
fclose(out);
return 0;
}