#include <bits/stdc++.h>
#define int long long
#define ls (id<<1)
#define rs ((id<<1)|1)
using namespace std ;
const int N = 2e5 + 10 , M = 1e6 + 10 ;
struct node{
int max1 , lazy ;
}tree[M<<2];
int a[N] , n , T ;
bool vis[M] ;
void pushup(int id)
{
tree[id].max1 = max(tree[ls].max1 , tree[rs].max1) ;
}
void down(int id)
{
tree[ls].max1 += tree[id].lazy ;
tree[rs].max1 += tree[id].lazy ;
tree[ls].lazy += tree[id].lazy ;
tree[rs].lazy += tree[id].lazy ;
tree[id].lazy = 0 ;
}
void update1(int id , int l , int r , int ql , int qr , int val)
{
if(l > qr || r < ql) return ;
if(l >= ql && r <= qr)
{
tree[id].max1 = max(tree[id].max1 , val) ;
return ;
}
int mid = l + r >> 1 ;
if(tree[id].lazy) down(id) ;
update1(ls , l , mid , ql , qr , val) ;
update1(rs , mid + 1 , r , ql , qr , val) ;
pushup(id) ;
}
void update(int id , int l , int r , int ql , int qr , int val)
{
if(l > qr || r < ql) return ;
if(l >= ql && r <= qr)
{
tree[id].max1 += val ;
tree[id].lazy += val ;
return ;
}
if(tree[id].lazy) down(id) ;
int mid = l + r >> 1 ;
update(ls , l , mid , ql , qr , val) , update(rs , mid + 1 , r , ql , qr , val) ;
pushup(id) ;
return ;
}
int query(int id , int l , int r , int ql , int qr)
{
if(l > qr || r < ql) return 0 ;
if(l >= ql && r <= qr) return tree[id].max1 ;
int mid = l + r >> 1 ;
if(tree[id].lazy) down(id) ;
return max(query(ls , l , mid , ql , qr) , query(rs , mid + 1 , r , ql , qr)) ;
}
signed main()
{
cin.tie(0) ;
ios::sync_with_stdio(false) ;
cin >> T ;
while(T -- )
{
memset(vis , 0 , sizeof vis) ;
for(int i = 0 ; i < N ; i ++ ) tree[i].max1 = tree[i].lazy = 0 ;
cin >> n ;
int len = 0 ;
for(int i = 1 ; i <= n ; i ++ ) cin >> a[i] , len = max(len , a[i]) ;
vis[a[1]] = true ;
for(int i = 2 ; i <= n ; i ++ )
{
int maxn = query(1 , 1 , len , 1 , len) ;
int maxx = query(1 , 1 , len , a[i] , a[i]) ;
if(a[i] == a[i-1]) update(1 , 1 , len , 1 , len , a[i]) ;
update1(1 , 1 , len , a[i-1] , a[i-1] , maxn) ;
if(vis[a[i]]) update1(1 , 1 , len , a[i-1] , a[i-1] , maxx + a[i]) ;
vis[a[i]] = true ;
}
cout << query(1 , 1 , len , 1 , len) << endl ;
}
return 0 ;
}