#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=7e5+10;
struct edge{
int x,y,w;
bool operator<(const edge p)const{
return w<p.w;
}
}R[N];
int n,m;
int f[N];
void init(){
for(int i=1;i<=n;i++)f[i]=i;
}
int find(int x){
if(f[x]==x)return x;
return f[x]=find(f[x]);
}
bool in[N];
int head[N],vct[N],nxt[N],edge[N],idx;
void add(int x,int y,int w){
vct[++idx]=y;edge[idx]=w;
nxt[idx]=head[x];head[x]=idx;
}
int maxi[N][30],maxx[N][30],fa[N][30],dep[N];
void dfs(int u,int fs){
for(int i=head[u];i;i=nxt[i]){
int v=vct[i];
if(v==fs)continue;
fa[v][0]=u;maxi[v][0]=edge[i];
dfs(v,u);
}
}
void init1(){
for(int k=1;k<=29;k++){
for(int i=1;i<=n;i++){
fa[i][k]=fa[fa[i][k-1]][k-1];
maxi[i][k]=max(maxi[i][k-1],maxi[fa[i][k-1]][k-1]);
maxx[i][k]=max(maxx[i][k-1],maxx[fa[i][k-1]][k-1]);
if(maxi[i][k-1]!=maxi[fa[i][k-1]][k-1]) maxx[i][k]=max(maxx[i][k],min(maxi[i][k-1],maxi[fa[i][k-1]][k-1]));
}
}
}
int maxS(int x,int y){
if(x>y)return x;
else return y;
}
int minS(int x,int y){
if(x<y)return x;
else return y;
}
unsigned long long ans=1e15;
unsigned long long sum=0;
void work(int x,int y,int id){
int max1=-0x7f7f7f7f;
if(dep[x]>dep[y])swap(x,y);
for(int i=29;i>=0;i--){
if(dep[fa[y][i]]>=dep[x]){
if(R[id].w==maxi[y][i])max1=max(maxx[y][i],max1);
else max1=max(maxi[y][i],max1);
y=fa[y][i];
}
}
if(x==y){
}else{
for(int i=29;i>=0;i--){
if(fa[x][i]!=fa[y][i]){
if(R[id].w==maxi[y][i])max1=max(maxx[y][i],max1);
else max1=max(maxi[y][i],max1);
if(R[id].w==maxi[x][i])max1=max(maxx[x][i],max1);
else max1=max(maxi[x][i],max1);
y=fa[y][i];
x=fa[x][i];
}
}
if(R[id].w==maxi[y][0])max1=max(maxx[y][0],max1);
else max1=max(maxi[y][0],max1);
if(R[id].w==maxi[x][0])max1=max(maxx[x][0],max1);
else max1=max(maxi[x][0],max1);
y=fa[y][0];
x=fa[x][0];
}
ans=minS(R[id].w-max1+sum,ans);
}
signed main(){
memset(maxi,-0x7f7f7f7f,sizeof maxi);
memset(maxx,-0x7f7f7f7f,sizeof maxx);
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>R[i].x>>R[i].y>>R[i].w;
sort(R+1,R+1+m);
init();
for(int i=1;i<=m;i++){
int sum1=find(R[i].x),sum2=find(R[i].y);
if(sum1==sum2)continue;
f[sum1]=sum2;
in[i]=1;
sum+=R[i].w;
add(R[i].x,R[i].y,R[i].w);add(R[i].y,R[i].x,R[i].w);
}
dfs(1,0);
init1();
for(int i=1;i<=m;i++){
if(!in[i]&&R[i].x!=R[i].y){
work(R[i].x,R[i].y,i);
}
}
cout<<ans;
return 0;
}