Submission
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define i32 INT_MAX
#define i64 LONG_LONG_MAX
#define pii std::pair<int, int>
#define pll std::pair<long long, long long>
#define pb push_back
#define fore(i,u,v) for(int i=head[u],v;i;i=e[i].nxt)
typedef long long ll;
const int N = 205, M = 6e3 + 10;
ll read(){ll x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;}
void print(ll x){if(x<0)putchar('-'),x=-x;if(x>9)print(x/10);putchar(x%10+48);}
char gc(){char c=getchar();while(c==' '||c=='\n')c=getchar();return c;}
void pc(char Char){std::putchar(Char);}
int n, m, head;
struct edge {
int u, v, w, lst, nxt;
} e[M];
struct DSU {
int rt[N];
int find(int u) {
if(rt[u] == u) return u;
return rt[u] = find(rt[u]);
}
void merge(int u, int v) {
rt[find(u)] = find(v);
}
} dsu;
int kruskal() {
int Count = 0, Sum = 0;
for(int i = head; i; i = e[i].nxt) {
int u = e[i].u, v = e[i].v, w = e[i].w;
if(dsu.find(u) != dsu.find(v)) {
Count++, Sum += w;
dsu.merge(u, v);
if(Count == n - 1) return Sum;
}
}
if(Count == n - 1) return Sum;
return -1;
}
int main() {
std::cin >> n >> m;
for(int i = 1; i <= m; i++) {
int u, v, w;
std::cin >> u >> v >> w;
if(i > 1) {
e[i].u = u, e[i].v = v, e[i].w = w;
for(int j = head; j; j = e[j].nxt) {
if(e[j].w >= w) {
e[e[j].lst].nxt = i;
e[i].lst = e[j].lst;
e[j].lst = i;
e[i].nxt = j;
if(j == head) head = i;
break;
}
if(e[j].nxt == 0) {
e[i].lst = j;
}
}
} else {
head = 1;
e[1].u = u, e[1].v = v, e[1].w = w;
}
for(int j = 1; j <= n; j++) dsu.rt[j] = j;
print(kruskal());
pc('\n');
}
return 0;
}