#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,ans=100002,i,j,x,a[100002],used1[100002],used2[100002];
int main()
{
    scanf("%d",&n);
    if (n<=16)
    {
        for(i=1;i<=n;i++)
           scanf("%d",a+i);
        for(i=0;i<=(1<<n);i++)
        {
            int p=1,fl=0,br=0,prev=0;
            for(j=1;j<=n;j++)
            {
                x=i&p;
                if (x!=0 && a[n-j+1]!=prev && used1[a[n-j+1]]==1) {fl=1;break;}
                if (x!=0 && a[n-j+1]!=prev) used1[a[n-j+1]]=1;
                if (x==0 && used2[a[n-j+1]]==0) {br++;used2[a[n-j+1]]=1;}
                if (x!=0) prev=a[n-j+1];
                p=p<<1;
            }
            for(j=1;j<=n;j++)
            {
                used1[j]=0;
                used2[j]=0;
            }
            if (fl==0) ans=min(ans,br);
        }
    }
    else
    {
        int maxbr=0,maxs,maxf,br,start=0,used[100001];
        pair <int, int> b[100001];
        for(i=1;i<=n;i++)
        {
            scanf("%d",&b[i].first);
            a[i]=b[i].first;
            b[i].second=i;
        }
        sort(b+1,b+n+1);
        for(i=1;i<=n;i++)
        {
            if (b[i].first!=b[i-1].first)
            {
                br=b[i-1].second-start;
                if (br>maxbr) {maxbr=br;maxs=start;maxf=b[i-1].second;}
                start=b[i].second;
            }
        }
        br=0;
        for(i=maxs+1;i<=maxf-1;i++)
            if (used[a[i]]==0) {used[a[i]]=1;br++;}
        ans=br;
    }
    printf("%d\n",ans);
	return 0;
}
