/*
TASK: seq
LANG: C++
*/
#include <stdio.h>
#include <algorithm>
using namespace std;

 int a[1000002];
 pair<int,int> z[1000002];
 int n,m,res;
 int v[1000002];
 int u[1000002];

 int solve (int dir)
  {
   int i,cur,c;
   if (dir==1) cur=0;
   if (dir==2) cur=n+2;
   c=0;
   for (i=1;i<=m;i++)
    {    
     if (dir==1 && cur<v[i]) cur=u[i];
      else
       if (dir==1 && cur>v[i])
        {
         cur=v[i];
         dir=2;
         c++;
        }
         else
          if (dir==2 && cur>u[i])
           cur=v[i];
            else
             if (dir==2 && cur<u[i])
              {
               cur=u[i];
               dir=1;
               c++;
              }              
    }
   return c;
  }  

 int main ()
  {
   int i,j;
   scanf("%d",&n);
   for (i=1;i<=n;i++)
    {
     scanf("%d",&a[i]);
     z[i].first=a[i];
     z[i].second=i;
    }    
   sort(&z[1],&z[n+1]);
   j=2000000001;
   m=0;
   for (i=1;i<=n;i++)
    if (z[i].first!=j)
     {
      j=z[i].first;
      ++m;
      u[m]=v[m]=z[i].second;
     }
      else
       u[m]=z[i].second;   
   res=(int)1e9;
   res=min(res,solve(1));
   res=min(res,solve(2));


   printf("%d\n",res);
   return 0;
  }
