{
TASK:psort
LANG:PASCAL
}
program psort;

const
	MAXN					= 20;
	MAXB					= 50000;

type
	Integer					= LongInt;
	TArray					= Array [1 .. MAXN] of Integer;

var
	a					: TArray;
	b					: Array [1 .. MAXB] of Integer;
	f					: Array [0 .. MAXN] of Integer;
	n, i, j					: Integer;
	d					: Boolean;

procedure readInput;
begin
	readln(n);
	if (n <= 20) then
		for i := 1 to n do
			read(a[i])
	else
		for i := 1 to n do
			read(b[i]);
end;

function solve(a: TArray; n : Integer): Integer;
var
	f1, f2, i, bn, m, im			: Integer;
	b					: TArray;
begin
	if (n < 2) then begin
		solve := 0;
		Exit;
	end;
	if (n = 2) then begin
		if (a[1] > a[2]) then
			solve := 1
		else
			solve := 0;
		Exit;
	end;
	m := maxlongint;
	for i := 1 to n do
		if (a[i] < m) then begin
			m := a[i];
			im := i;
		end;
	bn := n-im;
	for i := im+1 to n do
		b[i-im] := a[i];
	f1 := solve(b, bn) + im-1;
	bn := n-1;
	for i := 1 to im-1 do
		b[i] := a[i];
	for i := im+1 to n do
		b[i-1] := a[i];
	f2 := solve(b, bn) + 1;
        if (im = 1) then f2 := f2-1;
	if (f1 < f2) then solve := f1 else solve := f2;
end;

begin
	readInput;
	if (n <= 20) then begin
		writeln(solve(a, n))
	end else begin
		d := True;
		for i := 1 to n do
			if (b[i] <> (n-i+1)) then begin
				d := False;
				break;
			end;
		if (d) then begin
			writeln(n-1);
			Exit;
		end;
	end;
end.