90WA#1qaq
#include<bits/stdc++.h>
using namespace std;
const long long N=2000005;
long long head[N],en,ff[N],scs,logN,bian=10000000000005;
long long find(long long x){
if(x==ff[x])return x;
ff[x]=find(ff[x]);
return ff[x];
}
struct EE{
long long from,to,val;
}e[6*N];
bool cmp(EE i,EE j){
if(i.val==j.val){
if(i.from==j.from)
return i.to<j.to;
return i.from<j.from;
}
return i.val<j.val;
}
struct Edge{
long long next,to,val;
}edge[6*N];
void add(long long from,long long to,long long val){
edge[++en].to=to;
edge[en].val=val;
edge[en].next=head[from];
head[from]=en;
}
long long n,m,fd[N][30],fc[N][30],f[N][30],dep[N];
bool pd[N];
void dfs(long long u){
for(long long i=1;i<=logN;i++)
if(f[u][i-1]){
f[u][i]=f[f[u][i-1]][i-1];
long long a=fd[f[u][i-1]][i-1],b=fd[u][i-1],c=fc[f[u][i-1]][i-1],d=fc[u][i-1];
fd[u][i]=max(a,b);
if(a==max(a,b))a=0;
else b=0;
fc[u][i]=max(a,max(b,max(c,d)));
}
else break;
for(long long i=head[u];i;i=edge[i].next){
long long v=edge[i].to;
long long w=edge[i].val;
if(f[u][0]!=v){
f[v][0]=u;
fd[v][0]=w;
dep[v]=dep[u]+1;
dfs(v);
}
}
return;
}
long long lca(long long u,long long v){
if(dep[u]<dep[v])swap(u,v);
for(long long i=logN;i>=0;i--)
if(dep[f[u][i]]>=dep[v])
u=f[u][i];
if(u==v)return u;
for(long long i=logN;i>=0;i--)
if(f[u][i]!=f[v][i]){
u=f[u][i];
v=f[v][i];
}
return f[u][0];
}
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++)ff[i]=i;
logN=int(log2(n));
long long u,v,w;
for(long long i=1;i<=m;i++){
scanf("%lld%lld%lld",&u,&v,&w);
if(u==v)continue;
e[i].from=u;
e[i].to=v;
e[i].val=w;
}
sort(e+1,e+m+1,cmp);
int cnt=0;
for(long long i=1;i<=m;i++){
u=e[i].from;
v=e[i].to;
if(find(u)==find(v))continue;
cnt++;
pd[i]=1;
scs+=e[i].val;
add(u,v,e[i].val);
add(v,u,e[i].val);
ff[find(u)]=find(v);
if(cnt==n-1)break;
}
dep[1]=1;
dfs(1);
for(long long i=1;i<=m;i++){
if(pd[i]||(e[i].from==e[i-1].from&&e[i].to==e[i-1].to&&e[i].val==e[i-1].val))continue;
u=e[i].from;
v=e[i].to;
w=e[i].val;
long long lc=lca(u,v);
long long da1=0,da2=0;
long long ci1=0,ci2=0;
for(long long j=logN;j>=0;j--){
if(dep[f[u][j]]>=dep[lc]){
da1=max(da1,fd[u][j]);
ci1=max(ci1,fc[u][j]);
u=f[u][j];
}
}
for(long long j=logN;j>=0;j--){
if(dep[f[v][j]]>=dep[lc]){
da2=max(da2,fd[v][j]);
ci2=max(ci2,fc[v][j]);
v=f[v][j];
}
}
if(max(da1,da2)<w)
bian=min(w-max(da1,da2),bian);
else{
if(max(da1,da2)==da1)da1=0;
else da2=0;
if(da1==da2)da1=da2=0;
bian=min(w-max(da1,max(da2,max(ci1,ci2))),bian);
}
}
cout<<bian+scs;
return 0;
}