#include<stdio.h>
#include<vector>
using namespace std;
int min(int a, int b) { if (a == 0)return b; if (a < b)return a; return b; }
int max(int a, int b) { if (a == 0)return b; if (a < b)return b; return a; }
struct xy { int x, y; }G[121212], L[121212];
int S[121212], E[121212];
vector<int>ST;
int main() {
int n, i, x, ln;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%d", &x);
G[x].x = min(G[x].x, i);
G[x].y = max(G[x].y, i);
}
for (i = 1; i <= n; i++) if(G[i].x)S[G[i].x] = i, E[G[i].y] = i;
int ans = 0;
for (i = 1; i <= n; i++) {
if (S[i]) ST.push_back(S[i]);
if (E[i]) {
if (ST.back() != E[i]) { printf("-1"); return 0; }
ans = max(ST.size(), ans);
ST.pop_back();
}
}
printf("%d", ans);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbWluKGludCBhLCBpbnQgYikgeyBpZiAoYSA9PSAwKXJldHVybiBiOyBpZiAoYSA8IGIpcmV0dXJuIGE7IHJldHVybiBiOyB9CmludCBtYXgoaW50IGEsIGludCBiKSB7IGlmIChhID09IDApcmV0dXJuIGI7IGlmIChhIDwgYilyZXR1cm4gYjsgcmV0dXJuIGE7IH0Kc3RydWN0IHh5IHsgaW50IHgsIHk7IH1HWzEyMTIxMl0sIExbMTIxMjEyXTsKaW50IFNbMTIxMjEyXSwgRVsxMjEyMTJdOwp2ZWN0b3I8aW50PlNUOwppbnQgbWFpbigpIHsKCWludCBuLCBpLCB4LCBsbjsKCXNjYW5mKCIlZCIsICZuKTsKCWZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJc2NhbmYoIiVkIiwgJngpOwoJCUdbeF0ueCA9IG1pbihHW3hdLngsIGkpOwoJCUdbeF0ueSA9IG1heChHW3hdLnksIGkpOwoJfQoJZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIGlmKEdbaV0ueClTW0dbaV0ueF0gPSBpLCBFW0dbaV0ueV0gPSBpOwoJaW50IGFucyA9IDA7Cglmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWlmIChTW2ldKSBTVC5wdXNoX2JhY2soU1tpXSk7CgkJaWYgKEVbaV0pIHsKCQkJaWYgKFNULmJhY2soKSAhPSBFW2ldKSB7IHByaW50ZigiLTEiKTsgcmV0dXJuIDA7IH0KCQkJYW5zID0gbWF4KFNULnNpemUoKSwgYW5zKTsKCQkJU1QucG9wX2JhY2soKTsKCQl9Cgl9CglwcmludGYoIiVkIiwgYW5zKTsKCXJldHVybiAwOwp9