//
// main.cpp
// test
//
// Created by 吴有堃 on 2017/9/11.
// Copyright © 2017年 吴有堃. All rights reserved.
//
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <queue>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
const int maxn=1e2+5;
int t=0,n=0,m=0,p[maxn];
struct node{
int left,right,weight;
}Q[10005];
bool cmp(node node1,node node2)
{
return node1.weight<node2.weight;
}
int find(int x){return p[x]==x?x:p[x]=find(p[x]);}
int Krusckal()
{
int ans=0;
for(int i=1;i<=n;i++) p[i]=i;//初始化并查集, 点是从1开始的
sort(Q,Q+m,cmp);
for(int i=0;i<m;i++){
int x=find(Q[i].left);int y=find(Q[i].right);
//printf("%d %d\n",x,y);
if(x!=y){
ans+=Q[i].weight;p[x]=y;
// printf("%d\n",ans);
}
}
return ans;
}
int main()
{
int x=0,y=0,i=0,w=0;
scanf("%d",&t);
while (t--){
scanf("%d %d",&n,&m);
for(i=0;i<m;i++){
scanf("%d %d %d",&x,&y,&w);
Q[i].left=x;Q[i].right=y;Q[i].weight=w;
}
printf("%d\n",Krusckal());
}
return 0;
}