/*
TASK: seq
LANG: C
*/
#include<stdio.h>
#include<stdlib.h>

#define MAXN 1048576
#define MIN(e1,e2) ((e1)<(e2)?(e1):(e2))

typedef struct num { int v,p; } num;

int f[MAXN][2];
num a[MAXN];

int cmp(const void *e1,const void *e2)
{
	if(((num*)e1)->v!=((num*)e2)->v) return ((num*)e1)->v-((num*)e2)->v;
	else return ((num*)e1)->p-((num*)e2)->p;
}

int main()
{
	int n,i,j,lastX,lastY,curX,curY,t;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i].v);
		a[i].p=i;
	}
	qsort(a+1,n,sizeof(a[0]),cmp);
	f[0][0]=f[0][1]=0;
	a[0].v=a[n+1].v=-1;
	lastX=n+1; lastY=0;
	j=0; curX=0;
	for(i=1;i<=n;i++)
	{
		if(a[i].v!=a[i-1].v) curX=a[i].p;
		if(a[i].v!=a[i+1].v)
		{
			curY=a[i].p;
			j++;
			t=(lastX>curY)?0:2;
			f[j][0]=MIN(f[j-1][0]+t,f[j-1][1]+1);
			t=(lastY<curX)?0:2;
			f[j][1]=MIN(f[j-1][0]+1,f[j-1][1]+t);
			lastX=curX;
			lastY=curY;
		}
	}
	printf("%d\n",MIN(f[j][0],f[j][1]));
	return 0;
}
