#include<bits/stdc++.h>
using namespace std;
inline int rd(){int x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=(x<<3)+(x<<1)+c-'0';c=getchar();}return x*f;}
struct AC{int u,v,w,use,idx;}e[6010];
int n,m,w,f[210],ans[6010];
bool cmp(AC x,AC y){return x.w<y.w;}
void add(int x,int y,int z,int i){
m++;e[m].u=x;e[m].v=y;e[m].w=z;e[m].use=0;e[m].idx=i;
}
int find(int x){
if(f[x]!=x)return f[x]=find(f[x]);
}
int del(int x){
int i=1;while(e[i].idx!=x)i++;
e[i].idx=-1;return i;
}
int kruscal(){
int res=0,tot=0;
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<m;i++)
if(e[i+1].w<e[i].w)
swap(e[i],e[i+1]);
for(int i=1;i<=m;i++){
int fx=find(e[i].u),fy=find(e[i].v);
if(fx==fy||e[i].idx==-1)continue;f[fx]=fy;
e[i].use=1;tot++;res+=e[i].w;
if(tot==n-1)break;
}
return res;
}
signed main(){
n=rd();w=rd();
for(int i=1,x,y,z;i<=w;i++){
x=rd();y=rd();z=rd();
add(x,y,z,i);
}
sort(e+1,e+m+1,cmp);
ans[w]=kruscal();
for(int i=w-1;i>=1;i--){
if(i<n){ans[i]=-1;continue;}
int t=del(i+1);
if(e[t].use||i==w)ans[i]=kruscal();
else ans[i]=ans[i+1];
}
for(int i=1;i<=w;i++)
cout<<ans[i]<<endl;
return 0;
}