#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
using namespace std;
const int N=2e5+7,M=3e5+7,INF=1e18+7;
int n,m,fa[N],book[N],dep[N],ans1=0,ans2=INF;
struct NODE{
int x,y,z;
}a[M];
struct TREE{
int val,idx;
}g[N][22];
vector<pii> e[N];
bool cmp(NODE a1,NODE a2){
return a1.z<a2.z;
}
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
void dfs(int u,int f,int k){
dep[u]=dep[f]+1;
g[u][0]={k,f};
for(int i=1;i<=20;i++){
g[u][i].idx=g[g[u][i-1].idx][i-1].idx;
g[u][i].val=max(g[u][i-1].val,g[g[u][i-1].idx][i-1].val);
}
for(int i=0;i<e[u].size();i++){
int v=e[u][i].first,w=e[u][i].second;
if(v==f) continue;
dfs(v,u,w);
}
}
int LCA(int x,int y,int w){//寻找链上最大边
int r1=0,r2=0;//r1最大值,r2次大值
if(dep[x]<dep[y]) swap(x,y);
for(int i=20;i>=0;i--){
if(g[x][i].idx==0) continue;
if(dep[g[x][i].idx]>=dep[y]){
if(g[x][i].val>r1) r2=r1,r1=g[x][i].val;
else if(g[x][i].val>r2) r2=g[x][i].val;
x=g[x][i].idx;
}
}
if(x==y){
if(w==r1) return w-r2;
else return w-r1;
}
for(int i=20;i>=0;i--){
if(g[x][i].idx==0 || g[y][i].idx==0) continue;
if(g[x][i].idx!=g[y][i].idx){
if(g[x][i].val>r1) r2=r1, r1=g[x][i].val;
else if(g[x][i].val>r2) r2=g[x][i].val;
if(g[y][i].val>r1) r2=r1, r1=g[y][i].val;
else if(g[x][i].val>r2) r2=g[y][i].val;
x=g[x][i].idx;
y=g[y][i].idx;
}
}
if(g[x][0].val>r1) r2=r1, r1=g[x][0].val;
else if(g[x][0].val>r2) r2=g[x][0].val;
if(g[y][0].val>r1) r2=r1, r1=g[y][0].val;
else if(g[y][0].val>r2) r2=g[y][0].val;
if(w==r1) return w-r2;
else return w-r1;
}
signed main(){
// freopen("P4180_1.in","r",stdin);
// freopen("P4180.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++){
int a1,a2,a3;
cin>>a1>>a2>>a3;
if(a1==a2) a3=INF;
a[i]={a1,a2,a3};
}
sort(a+1,a+1+m,cmp);
for(int i=1;i<=m;i++){
int u=a[i].x, v=a[i].y, w=a[i].z;
if(find(u)!=find(v)){
fa[find(u)]=find(v);
e[u].push_back({v,w});
e[v].push_back({u,w});
book[i]=1,ans1+=w;
}
}
dfs(1,0,0);
for(int i=1;i<=m;i++){
if(book[i]) continue;
int u=a[i].x,v=a[i].y,w=a[i].z;
ans2=min(ans2,LCA(u,v,w));
}
cout<<ans1+ans2;
return 0;
}