{
TASK: seq
ID: k02
LANG: PASCAL
}

const ogr = 1000002;

type el = record
           min, max : longint;
          end;

type el2 = record
            upp, downn : longint;
           end;

var a, ind : array[0..ogr] of longint;
    b : array[0..ogr] of el;
    c : array[0..ogr] of el2;
    answer, k1, k2, min, max, w, vr, i, j, k, l, o, p, m, n : longint;
    fl, sw : longint;



procedure input;
var f : text;
 begin
  assign(f, '');
  reset(f);
  readln(f, n);
  for i := 1 to n do
    begin
     read(f, a[i]);
     ind[i] := i;
    end;
  close(f);
 end;


procedure preprocessing;
 begin
  for i := 2 to n do
    begin
     w := i;
     while (w > 1) and (a[w] < a[w div 2]) do
       begin
        sw := a[w];
        a[w] := a[w div 2];
        a[w div 2] := sw;
        sw := ind[w];
        ind[w] := ind[w div 2];
        ind[w div 2] := sw;
        w := w div 2;
       end;
    end;
 end;

procedure preprocessing2;
 begin
  vr := n;
  for i := 1 to n - 1 do
    begin
     sw := a[vr];
     a[vr] := a[1];
     a[1] := sw;
     sw := ind[vr];
     ind[vr] := ind[1];
     ind[1] := sw;
     dec(vr);
     w := 1;
     while w * 2 <= vr do
       begin
        k := w * 2;
        if (w * 2 + 1 <= vr) and (a[w * 2 + 1] < a[w * 2]) then k := w * 2 + 1;
        if a[k] > a[w] then break;
        sw := a[w];
        a[w] := a[k];
        a[k] := sw;
        sw := ind[w];
        ind[w] := ind[k];
        ind[k] := sw;
        w := k;
       end;
    end;
 end;

procedure groups;
 begin
  vr := 0;
  for i := n downto 1 do
    begin
     if a[i] <> a[i + 1] then
       begin
        inc(vr);
        b[vr].min := 2000000000;
       end;
     if ind[i] > b[vr].max then b[vr].max := ind[i];
     if ind[i] < b[vr].min then b[vr].min := ind[i];
    end;
 end;



begin
 input;
 preprocessing;
 preprocessing2;
 groups;
 for i := 2 to vr do
   begin
    k1 := 0;
    k2 := 0;
    k1 := c[i - 1].upp;
    if b[i].min < b[i - 1].max then inc(k1, 2);
    k2 := c[i - 1].downn + 1;
    if ((b[i - 1].min = b[i - 1].max) and (b[i - 1].min < b[i].min)) then dec(k2)
    else if ((b[i].min = b[i].max) and (b[i].min < b[i - 1].min)) then dec(k2);
    if k1 < k2 then c[i].upp := k1
    else c[i].upp := k2;
    {}{}{}{}{}{}
    k1 := 0;
    k2 := 0;
    k1 := c[i - 1].upp + 1;
    if ((b[i - 1].min = b[i - 1].max) and (b[i - 1].max > b[i].max)) then dec(k1)
    else if ((b[i].min = b[i].max) and (b[i - 1].max < b[i].min)) then dec(k1);
    k2 := c[i - 1].downn;
    if b[i - 1].min < b[i].max then inc(k2, 2);
    if k1 < k2 then c[i].downn := k1
    else c[i].downn := k2;
   end;
 if c[vr].upp < c[vr].downn then answer := c[vr].upp
 else answer := c[vr].downn;
 writeln(answer);
end.













