#include<stdio.h>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<string.h>
#define en '\n'
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
const int maxn =1000005;
using namespace std;
#define inl inline
const int inf=0x3f3f3f3f;
inl int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct node{
int v,nxt,w;
}edge[maxn];
int tot=0,head[maxn],n,m;
void add(int x,int y,int w){
edge[++tot]=(node){y,head[x],w};
head[x]=tot;
}
int a[maxn][3],d[maxn];
inl void init(){
mem(head,0);mem(d,0x3f);tot=0;
}
ll sum=0;
bool vis[maxn];
void spfa(int start){
queue<int>q;
vis[start]=1;
d[start]=0;
q.push(start);
while(!q.empty()){
int u=q.front();q.pop();
vis[u]=0;
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].v;
int w=edge[i].w;
if(d[v]>d[u]+w){
d[v]=d[u]+w;
if(!vis[v]){
q.push(v);
vis[v]=1;
}
}
}
}
for(int i=1;i<=n;i++)sum+=d[i];
}
signed main()
{
#ifdef local
freopen("input2.txt","r",stdin);
#endif // local
int T;
cin>>T;
while(T--){
n=read(),m=read();
for(int i=1;i<=m;i++){
a[i][0]=read(),a[i][1]=read(),a[i][2]=read();
}
sum=0;init();
for(int i=1;i<=m;i++){
add(a[i][0],a[i][1],a[i][2]);
}
spfa(1);
init();
for(int i=1;i<=m;i++){
add(a[i][1],a[i][0],a[i][2]);
}
spfa(1);
cout<<sum<<en;
}
return 0;
}