← Home
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=2e5+5;
int T,n,k;
int a[N],pre_g[N],suf_g[N],pre_l[N],suf_l[N],f1[N],f2[N];
vector<int>pos[N];
int main()
{
	auto start=chrono::high_resolution_clock::now();
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>T;
	while(T--)
	{
		cin>>n>>k;
		for(int i=1;i<=n;i++)
			pos[i].clear();
		for(int i=1;i<=n;i++)
			cin>>a[i],pos[a[i]].push_back(i);
		stack<int>st;
		for(int i=1;i<=n;i++)
			pre_g[i]=pre_l[i]=0,suf_g[i]=suf_l[i]=n+1;
		for(int i=n;i>=1;i--)
		{
			while(!st.empty()&&a[i]>a[st.top()]) pre_g[st.top()]=i,st.pop();
			st.push(i);
		}
		while(!st.empty()) st.pop();
		for(int i=1;i<=n;i++)
		{
			while(!st.empty()&&a[i]>a[st.top()]) suf_g[st.top()]=i,st.pop();
			st.push(i);
		}
		while(!st.empty()) st.pop();
		for(int i=n;i>=1;i--)
		{
			while(!st.empty()&&a[i]<a[st.top()]) pre_l[st.top()]=i,st.pop();
			st.push(i);
		}
		while(!st.empty()) st.pop();
		for(int i=1;i<=n;i++)
		{
			while(!st.empty()&&a[i]<a[st.top()]) suf_l[st.top()]=i,st.pop();
			st.push(i);
		}
		// for(int i=1;i<=n;i++)
		// 	cerr<<"i="<<i<<" pre_g="<<pre_g[i]<<" suf_g="<<suf_g[i]<<" pre_l="<<pre_l[i]<<" suf_l="<<suf_l[i]<<"\n";
		ll ans=0;
		for(int i=1;i<=n;i++)
			if(!pos[i].empty()&&k-i>0&&k-i<=n&&!pos[k-i].empty())
			{
				int l=0,r=0,lst=0,s=0;
				for(int j=0;j<=(int)pos[k-i].size()-2;j++)
					s+=max(pos[k-i][j+1],suf_g[pos[k-i][j]]),f1[j]=s;
				s=0;
				for(int j=0;j<=(int)pos[k-i].size()-1;j++)
					s+=suf_g[pos[k-i][j]],f2[j]=s;
				for(int j=0;j<pos[i].size();j++)
				{
					while(r<pos[k-i].size()&&pre_g[pos[k-i][r]]<suf_l[pos[i][j]]) r++;
					while(l<pos[k-i].size()&&pos[k-i][l]<=pos[i][j]) l++;
					if(l>=r) continue;
					lst=max(lst,pre_l[pos[i][j]]+1);
					// cerr<<r<<"\n";
					// assert(r>=2);
					int sum=-pos[k-i][l]-(r>=2?f1[r-2]:0)+(r>0?f2[r-1]:0);
					if(l) sum+=f1[l-1]-f2[l-1];
					ans+=(pos[i][j]-lst+1)*sum;
					lst=pos[i][j]+1;
					// cerr<<"i="<<i<<" j="<<j<<" l="<<l<<" r="<<r<<" sum="<<sum<<" ans="<<ans<<"\n";
				}
			}
		cout<<ans<<"\n";
	}
	auto stop=chrono::high_resolution_clock::now();
	auto duration=chrono::duration_cast<chrono::milliseconds>(stop-start).count();
	cerr<<"Elapsed time: "<<duration<<" ms\n";
	return 0;
}