#include<bits/stdc++.h>
char buf[10000007],*ptr=buf;
int _(){
int x=0;
while(*ptr<48)++ptr;
while(*ptr>47)x=x*10+*ptr++-48;
return x;
}
const int N=3e5+7;
int T,n;
int a[N],pe[N],pb[N],pv[N],nx[N];
long long ans;
int min(int a,int b){return a<b?a:b;}
int _l,_r,_a;
struct node{
node*lc,*rc;
int L,R,M;
int mn,mt,a;
void add(int x){
mn+=x,a+=x;
}
void dn(){
if(a){
lc->add(a);
rc->add(a);
a=0;
}
}
void up(){
mn=min(lc->mn,rc->mn);
mt=(mn==lc->mn?lc->mt:0)+(mn==rc->mn?rc->mt:0);
}
void add(){
if(_l<=L&&R<=_r)return add(_a);
dn();
if(_l<=M)lc->add();
if(_r>M)rc->add();
up();
}
int c0(){
return mn?0:mt;
}
}ns[N*2],*np,*rt;
node*build(int L,int R){
node*w=np++;
w->L=L,w->R=R;
w->mn=w->a=w->M=0;
w->mt=R-L+1;
if(L<R){
int M=w->M=L+R>>1;
w->lc=build(L,M);
w->rc=build(M+1,R);
}
return w;
}
void add(int l,int r,int a){
_l=l,_r=r,_a=a;
if(l<=r)rt->add();
}
int main(){
fread(buf,1,sizeof(buf),stdin);
for(T=_();T;--T){
n=_();ans=0;
np=ns;
rt=build(1,n);
for(int i=1;i<=n;++i)a[i]=_(),pe[i]=0,pb[i]=n+1;
for(int i=1,x;i<=n;++i)x=a[i],pv[i]=pe[x],pe[x]=i;
for(int i=n,x;i>=1;--i)x=a[i],nx[i]=pb[x],pb[x]=i;
add(1,n,1);
for(int i=n,x;i;--i){
x=a[i];
add(i+1,nx[i]-1,1);
if(i==pb[x])add(pe[x],n,-1);
ans+=rt->c0();
}
printf("%lld\n",ans);
}
return 0;
}