/*
TASK:seq
LANG:C++
*/

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<sstream>
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
 
#define VI vector < int >
#define VS vector < string >
#define pb push_back
#define cs c_str()
#define sz size()
#define ALL(a) (a).begin(),(a).end()
///////////////////////////////////////////
#define in stdin;//fopen("c:\\tp\\tests\\noi\\seq.in","r")
#define mx 1048576
FILE*fn;

int ss[mx];
int cc,c;
int s[mx];
int s1[mx];
int r[mx],l[mx];

int readin1()
  {int q1,c1;
  fn=in;
  fscanf(fn,"%d",&c);
  for(q1=0;q1<c;q1++)fscanf(fn,"%d",&s[q1]);
  fclose(fn);
  return 0;}

int process1()
  {int q1,l,r,m;
  memcpy(s1,s,c*sizeof(s[0]));
  sort(s1,s1+c);
  for(q1=cc=1;q1<c;q1++)if(s1[q1]!=s1[cc-1])s1[cc++]=s1[q1];
   
  for(q1=0;q1<c;q1++)
    {
    l=0;
    r=cc-1;
    
    while(l!=r)
      {m=(l+r)/2;
      if(s1[m]<s[q1])l=m+1;
      else r=m;
      }
    ss[q1]=l;
    }
  return 0;}

int solve()
  {int q1,q2,c1,c2,c3,dir,pos;
  for(q1=0;q1<c;q1++)
    r[ss[q1]]=q1;
  for(q1=c-1;q1>=0;q1--)
    l[ss[q1]]=q1;  
  c1=c2=0;
  dir=1;
  pos=l[0];
  for(q1=1;q1<cc;q1++)
    {
    if(dir==1)
      {
      if(r[q1]<pos)
        {
        pos=l[q1];
        }
      else
        {
        pos=r[q1];
        c1++;
        dir=1-dir;
        }
      }
    else 
      {
      if(l[q1]>pos)
        {
        pos=r[q1];
        }
      else
        {
        pos=l[q1];
        c1++;
        dir=1-dir;
        }
      }
    }
  dir=0;
  pos=r[0];
  for(q1=1;q1<cc;q1++)
    {
    if(dir==1)
      {
      if(r[q1]<pos)
        {
        pos=l[q1];
        }
      else
        {
        pos=r[q1];
        c2++;
        dir=1-dir;
        }
      }
    else 
      {
      if(l[q1]>pos)
        {
        pos=r[q1];
        }
      else
        {
        pos=l[q1];
        c2++;
        dir=1-dir;
        }
      }
    }  
  return c1<c2?c1:c2;}

int main()
  {readin1();
  process1();
  printf("%d\n",solve());
  return 0;}
