#include <bits/stdc++.h>
using namespace std;
const int N=210,M=12010;
int h[M],to[M],w[M],ne[M],tot;
int n,t,f[M],ans;
int st[N][N],p;
void add(int x,int y,int z){
to[++tot]=y;ne[tot]=h[x];h[x]=tot;w[tot]=z;
}
struct node{
int x,y,w;
}a[M];
bool operator<(node xx,node yy){
return xx.w<yy.w;
}
int get(int a){
if(f[a]==a)return a;
return f[a]=get(f[a]);
}
int main(){
memset(st,0x3f,sizeof st);
scanf("%d%d",&n,&t);
int answ=-1;
for(int i=1;i<=t;i++){
int ans=0,res=1;
int xx,yy,ww;
scanf("%d%d%d",&xx,&yy,&ww);
if(st[xx][yy]>ww&&st[yy][xx]>ww){
st[xx][yy]=ww;st[yy][xx]=ww;
p++;
a[p].x=xx;a[p].y=yy;a[p].w=ww;
}
else {
printf("%d\n",answ);continue;
}
if(i<n-1){
printf("%d\n",-1);continue;
}
for(int k=1;k<=n;k++)f[k]=k;
sort(a+1,a+1+p);
for(int j=1;j<=p;j++){
if(res==n)break;
int x=get(a[j].x),y=get(a[j].y),e=a[j].w;
if(x==y)continue;
ans+=e;
f[y]=x;
res++;
}
if(res<n)printf("%d\n",-1);
else {
printf("%d\n",ans);answ=ans;
}
}return 0;
}```