#include <bits/stdc++.h>
using namespace std;
const int N=200000+5;
int n,t,cnt=0;
int a[N];
int pos[N]={0},lst[N],nxt[N];
int num[N]={0};
struct sdf{
int l,r;
}q[N];
long long ans=0;
bool cmp(sdf x,sdf y){
if (x.l/t!=y.l/t)return x.l<y.l;
if ((x.l/t)&1)return x.r<y.r;
else return x.r>y.r;
}
void add(int x){
if (num[a[x]]==0)cnt++;
num[a[x]]++;return ;
}
void del(int x){
if (num[a[x]]==1)cnt--;
num[a[x]]--;return ;
}
int main(){
freopen ("charger.in","r",stdin);
freopen ("charger.out","w",stdout);
scanf("%d",&n);t=sqrt(n);
for (int i=1;i<=n;i++)lst[i]=0,nxt[i]=n+1;
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
nxt[pos[a[i]]]=i;
pos[a[i]]=i;
}
for (int i=1;i<=n;i++)q[i]={i+1,nxt[i]-1};
sort(q+1,q+n+1,cmp);
int l=1,r=0;
for (int i=1;i<=n;i++){
while(l>q[i].l)add(--l);
while(r<q[i].r)add(++r);
while(l<q[i].l)del(l++);
while(r>q[i].r)del(r--);
ans+=cnt;
}
printf("%lld\n",ans);
return 0;
}