#4,#10 WA
#include<bits/stdc++.h>
using namespace std;
int n,m;
int head[100005];
struct e{
int nxt,to;
long long sum;
}edge[600005];
int cnte;
int used[300005];
int tot;
int logg;
void add_edge(int u,int v,long long w){
tot++;
edge[tot].nxt=head[u];
edge[tot].to=v;
edge[tot].sum=w;
head[u]=tot;
}
struct ee{
int from,to;
long long sum;
}ed[300005];
int cmp(ee a,ee b){
return a.sum<b.sum;
}
int fa[100005];
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
void unite(int x,int y){
int fx=find(x),fy=find(y);
fa[fx]=fy;
}
long long ans;
void kruskal(){
for(int i=1;i<=cnte;i++){
if(find(ed[i].from)!=find(ed[i].to))unite(ed[i].from,ed[i].to),ans+=ed[i].sum,used[i]=1;
}
}
int f[100005][30],d[100005];
long long maxn[100005][30][2];
void init(int now,int father,int depth){
d[now]=depth;
int nxt;
for(int i=head[now];i;i=edge[i].nxt){
nxt=edge[i].to;
if(nxt==father)continue;
f[nxt][0]=now;
maxn[nxt][0][0]=edge[i].sum;
for(int j=1;j<=logg;j++){
f[nxt][j]=f[f[nxt][j-1]][j-1];
maxn[nxt][j][0]=max(maxn[nxt][j-1][0],maxn[f[nxt][j-1]][j-1][0]);
if(maxn[nxt][j-1][0]==maxn[f[nxt][j-1]][j-1][0])maxn[nxt][j][1]=max(maxn[nxt][j-1][1],maxn[f[nxt][j-1]][j-1][1]);
if(maxn[nxt][j-1][0]>maxn[f[nxt][j-1]][j-1][0])maxn[nxt][j][1]=max(maxn[nxt][j-1][1],maxn[f[nxt][j-1]][j-1][0]);
if(maxn[nxt][j-1][0]<maxn[f[nxt][j-1]][j-1][0])maxn[nxt][j][1]=max(maxn[nxt][j-1][0],maxn[f[nxt][j-1]][j-1][1]);
}
init(nxt,now,depth+1);
}
}
long long LCA(int x,int y,long long sum){
long long re=0;
if(maxn[x][logg][0]<sum)re=maxn[x][logg][0];
else re=maxn[x][logg][1];
if(maxn[y][logg][0]<sum)re=max(re,maxn[y][logg][0]);
else re=max(re,maxn[y][logg][1]);
return re;
}
int main(){
scanf("%d%d",&n,&m);
int u,v,w;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
if(u==v)continue;
cnte++;
ed[cnte].from=u,ed[cnte].to=v,ed[cnte].sum=w;
}
for(int i=1;i<100005;i++){
fa[i]=i;
}
logg=log2(n)+1;
sort(ed+1,ed+1+cnte,cmp);
kruskal();
for(int i=1;i<=cnte;i++){
if(used[i])add_edge(ed[i].from,ed[i].to,ed[i].sum),add_edge(ed[i].to,ed[i].from,ed[i].sum);
}
init(1,0,1);
long long minn=LLONG_MAX;
for(int i=1;i<=cnte;i++){
if(used[i])continue;
long long lca=ed[i].sum-LCA(ed[i].from,ed[i].to,ed[i].sum);
minn=min(minn,lca);
}
ans+=minn;
printf("%lld\n",ans);
return 0;
}