import std.stdio, std.string, std.algorithm, std.array, std.range, std.conv,
    std.typecons, std.math, std.container, std.format;

long n;
long[] as;

alias T = Tuple!(long, long);
long[T] dp;

// i 今見ている位置、 j 今何個目か
long solve(long i, long j)
{
    if (i >= as.length)
    {
        return 0;
    }
    auto key = T(i, j);
    if (key in dp)
    {
        return dp[key];
    }

    if (as[i] == j)
    {
        // 砕いても砕かなくても良い

        long a = solve(i + 1, j + 1); // 砕かなかった場合
        long b = solve(i + 1, j) + 1; // 砕いた場合
        return dp[key] = min(a, b);
    }
    else
    {
        // 必ず砕く
        return dp[key] = solve(i + 1, j) + 1;
    }
}

void main(string[] args)
{
    readf("%d\n", &n);
    as = readln.strip.split(" ").to!(long[]);
    as[] -= 1;

    auto ans = solve(0, 0);
    if (ans >= as.length)
    {
        ans = -1;
    }
    writeln(ans);
}
