/*
TASK: SEQ
LANG: C
*/

#include<stdio.h>

#define MAXN 131072

void swift(int ,int );

typedef struct {
              int val,num;
              } seq;

seq a[MAXN],t;
int i,j,n,k;
int b[2][MAXN];
int c[2][MAXN];
int min1,min2;

int main () {
//    freopen("in.txt","rt",stdin);
//    freopen("seq.txt","wt",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;i++) {
        scanf("%d",&a[i].val);
        a[i].num=i;
        }

    for (i=n/2;i>0;i--)
        swift(i,n);

    for (i=1;i<n;i++) {
        t=a[1];
        a[1]=a[n-i+1];
        a[n-i+1]=t;
        swift(1,n-i);
        }

    for (i=1;i<=n;i++) {
        b[0][k]=a[i].num;
        while (a[i].val==a[i+1].val) i++;
        b[1][k++]=a[i].num;
        }

    c[0][0]=c[1][0]=0;
    if (b[1][0]<=b[0][1]) c[0][1]=0;
    else c[0][1]=1;
    if (b[0][0]>=b[1][1]) c[1][1]=0;
    else c[1][1]=1;

    for (i=2;i<k;i++) {
        min1=min2=MAXN;
        if (b[1][i-2]<=b[0][i-1]&&b[1][i-1]<=b[0][i])
           if (c[0][i-2]<min1) min1=c[0][i-2];
        if (b[1][i-2]<=b[0][i-1])
           if (c[0][i-2]+1<min2) min2=c[0][i-2]+1;
           if (c[0][i-2]+2<min1) min1=c[0][i-2]+2;
        if (b[0][i-1]>=b[1][i])
           if (c[0][i-2]+1<min2) min2=c[0][i-2]+1;
           
        if (b[1][i-1]<=b[0][i])
           if (c[1][i-2]+1<min1) min1=c[1][i-2]+1;
           if (c[1][i-2]+2<min2) min2=c[1][i-2]+2;
        if (b[0][i-2]>=b[1][i-1])
           if (c[1][i-2]+1<min1) min1=c[1][i-2]+1;
        if (b[0][i-2]>=b[1][i-1]&&b[0][i-1]>=b[1][i])
           if (c[1][i-2]<min2) min2=c[1][i-2];
        c[0][i]=min1;
        c[1][i]=min2;
        }
    
    if (c[0][k-1]==MAXN) printf("%d\n",c[1][k-1]);
    else {
         if (c[1][k-1]==MAXN) printf("%d\n",c[0][k-1]);
         else printf("%d\n",c[0][k-1]<c[1][k-1]?c[0][k-1]:c[1][k-1]);
         }
    return 0;
    }

void swift (int o, int r) {
     int p=o<<1;
     seq x=a[o];
     while (p<=r) {
           if (p<r)
              if (a[p+1].val>a[p].val) p++;
              else if (a[p+1].val==a[p].val&&a[p+1].num>a[p].num) p++;
           if (x.val>a[p].val) break;
           else if (x.val==a[p].val&&x.num>a[p].num) break;
           a[o]=a[p];
           o=p;
           p<<=1;
           }
     a[o]=x;
     return ;
     }
