#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=1e17;
const int Maxn=1e5+20;
const int Maxm=3e5+20;
inline ll Max(ll a,ll b){return a>b?a:b;}
inline ll Min(ll a,ll b){return a<b?a:b;}
inline int Read(){
int x=0;char ch=0;bool w=0;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return w?-x:x;
}
struct node {
int u,v,w;
};
bool cmp1(node a,node b){return a.w<b.w;}
ll res,ans=INF;
bool use[Maxm];
int n,m;
node e[Maxm];
int nxt[Maxn<<1],to[Maxn<<1],head[Maxn],val[Maxn<<1],tot;
int fa[Maxn][21],w[Maxn][21],w1[Maxn][21],log_2[Maxn];
int depth[Maxn];
int father[Maxn];
int find(int x){
if(father[father[x]]==father[x])return x;
return father[x]=find(father[x]);
}
inline void add(int u,int v,int w){
++tot;
val[tot]=w;
to[tot]=v;
nxt[tot]=head[u];
head[u]=tot;
return ;
}
void dfs(int u){
for(int i=1;i<=log_2[depth[u]];++i){
fa[u][i]=fa[fa[u][i-1]][i-1];
w[u][i]=Max(w[u][i-1],w[fa[u][i-1]][i-1]);
w1[u][i]=Max(w1[u][i-1],w1[fa[u][i-1]][i-1]);
if(w[u][i-1]>w[fa[u][i-1]][i-1])w1[u][i]=Max(w1[u][i],w[fa[u][i-1]][i-1]);
else if(w[u][i-1]<w[fa[u][i-1]][i-1])w1[u][i]=Min(w1[u][i],w[u][i-1]);
}
for(int i=head[u];i;i=nxt[i]){
int v=to[i];
if(fa[u][0]==v)continue;
depth[v]=depth[u]+1;
fa[v][0]=u;
w[v][0]=val[i];
w1[v][0]=-1000000;
dfs(v);
}
return ;
}
inline int LCA(int u,int v){
if(depth[u]<depth[v])swap(u,v);
for(int i=log_2[depth[u]];i>=0;--i){
if(depth[fa[u][i]]>=depth[v]){
u=fa[u][i];
}
}
if(u==v)return u;
for(int i=log_2[depth[u]];i>=0;--i){
if(fa[u][i]^fa[v][i]){
u=fa[u][i];
v=fa[v][i];
}
}
return fa[u][0];
}
inline int qmax(int u,int v,int maxx){
int t=-10000;
for(int i=log_2[depth[u]];i>=0;--i){
if(depth[fa[u][i]]>=depth[v]){
if(maxx!=w[u][i])t=Max(t,w[u][i]);
else t=Max(t,w1[u][i]);
u=fa[u][i];
}
}
return t;
}
int main(){
n=Read(),m=Read();
for(int i=1;i<=n;++i){
log_2[i]=log_2[i-1]+(i==(1<<log_2[i-1]));
}
for(int i=1;i<=m;++i){
e[i].u=Read(),e[i].v=Read(),e[i].w=Read();
}
sort(e+1,e+1+m,cmp1);
for(int i=1;i<=m;++i){
int u=e[i].u,v=e[i].v,w=e[i].w;
int fu=find(u),fv=find(v);
if(fu==fv)continue;
res+=e[i].w;
father[fu]=fv;
add(u,v,w);
add(v,u,w);
use[i]=1;
}
dfs(1);
for(int i=1;i<=m;++i){
if(use[i])continue;
int lca=LCA(e[i].u,e[i].v);
int d1=qmax(e[i].u,lca,e[i].w),d2=qmax(e[i].v,lca,e[i].w);
ans=Min(ans,res-Max(d1,d2)+e[i].w);
}
printf("%lld\n",ans);
return 0;
}