#include<bits/stdc++.h>
using namespace std;
#define MAX 5000010
int n,in[MAX];
int add(int l,int r,int last){
if(l==r || r==0) return -1;
else if(last==-1){//no exchange
if(in[r-1]<in[r]) return -1;
else if(in[r]<in[l]) return 1;
else return 0;
}else if(last==1){//exchange 1 time
if(in[r-1]<in[r] && in[r]<in[l]) return 1;
else return 0;
}else return 0;
}
int main(){
//freopen("in.in","r",stdin);
int T;cin>>T;
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&in[i]);
}
long long counts=0;
int r1=0,r2=0;
for(int l=0;l<n;l++){
r1=max(l,r1);
for(;r1<n && add(l,r1,-1)==-1;r1++);
r1=max(0,r1-1);r2=max(r1+1,r2);
for(;r2<n && add(l,r2,r2==r1+1?-1:1)!=0;r2++);
counts+=r2-r1-1;
}
printf("%d\n",counts);
//print(n);
}
return 0;
}
28和30过不了,显示读取到负号