P4180
//#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define int long long
#define INF 2147483647000000
#define N 400010
#define M 900010
using namespace std;
inline int gin(){
char c=getchar();
int s=0,f=1;
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
s=(s<<3)+(s<<1)+(c^48);
c=getchar();
}
return s*f;
}
int tot=0,head[N],dep[N],n,m,sum=0;
int f[N][19],g[N][19][2];
int fa[N];
bool B[M<<1];
struct node{int u,v,w;}a[M<<1];
struct edge{int ne,v,w;}e[N<<1];
inline void add(int u,int v,int w){
e[++tot].v=v;
e[tot].w=w;
e[tot].ne=head[u];
head[u]=tot;
}
bool cmp(node x,node y){
return x.w<y.w;
}
inline int find(int x){
return fa[x]==x ? fa[x] : fa[x]=find(fa[x]);
}
inline void kruskal(){
for(int i=1;i<=m;i++){
int x=find(a[i].u),y=find(a[i].v);
if(x==y)continue;
sum+=a[i].w;
fa[x]=y;
add(a[i].u,a[i].v,a[i].w);
add(a[i].v,a[i].u,a[i].w);
B[i]=true;
}
}
inline void dfs1(int u,int fa){
f[u][0]=fa;
for(int i=head[u];i;i=e[i].ne){
int v=e[i].v;
if(v==fa)continue;
dep[v]=dep[u]+1;
g[v][0][0]=e[i].w;
g[v][0][1]=-INF;
dfs1(v,u);
}
}
inline void dfs2(){
for(int j=1;j<=18;j++)
for(int i=1;i<=n;i++){
f[i][j]=f[f[i][j-1]][j-1];
g[i][j][0]=max(g[i][j-1][0],g[f[i][j-1]][j-1][0]);
if(g[i][j-1][0]==g[f[i][j-1]][j-1][0])
g[i][j][1]=max(g[i][j-1][1],g[f[i][j-1]][j-1][1]);
else if(g[i][j-1][0]< g[f[i][j-1]][j-1][0])
g[i][j][1]=max(g[i][j-1][0],g[f[i][j-1]][j-1][1]);
else
g[i][j][1]=max(g[i][j-1][1],g[f[i][j-1]][j-1][0]);
}
}
inline int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y);
for(int i=18;~i;i--)
if(dep[f[x][i]]>=dep[y])x=f[x][i];
if(x==y)return x;
for(int i=18;~i;i--)
if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];
return f[x][0];
}
inline int qmax(int u,int v,int d){
int ret=-INF;
for(int i=18;~i;i--){
if(dep[f[u][i]]>=dep[v]){
if(d!=g[u][i][0])ret=max(ret,g[u][i][0]);
else ret=max(ret,g[u][i][1]);
u=f[u][i];
}
}
return ret;
}
signed main(){
n=gin(),m=gin();
for(int i=1;i<=m;i++){
a[i].u=gin(),a[i].v=gin(),a[i].w=gin();
}
sort(a+1,a+m+1,cmp);
for(int i=1;i<=n;i++)fa[i]=i;
kruskal();
g[1][0][1]=-INF;
dep[1]=1;
dfs1(1,-1);
dfs2();
int ans=INF;
for(int i=1;i<=m;i++){
if(B[i])continue;
int u=a[i].u,v=a[i].v,w=a[i].w;
int yyh=lca(u,v);
int maxu=qmax(u,yyh,w),maxv=qmax(v,yyh,w);
ans=min(ans,sum-max(maxu,maxv)+w);
}
printf("%lld",ans);
return 0;
}