//Ö£ÀÏʦºÍna½ãÒ»Ñù¿É°®^ ^
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
const int M = 998244353;
const int mod = 1e9+7;
#define int long long
int up(int a,int b) {return a<0?a/b:(a+b-1)/b;}
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define db double
#define mk make_pair
#define pi acos(-1)
#define fi first
#define se second
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int n,m,p[100010],fa[100010][17],d1[100010][17],d2[100010][17],depth[100010];
vector<PII>g[100010];
int find(int x){
if(x!=p[x])p[x]=find(p[x]);
return p[x];
}
void dfs(int x){
queue<int>q;q.push(x);
memset(depth,0x3f3f,sizeof depth);
depth[0]=0,depth[x]=1;
while(q.size()){
auto u=q.front();q.pop();
for(auto [v,w]:g[u]){
if(depth[v]>depth[u]+1){
depth[v]=depth[u]+1;
q.push(v);
fa[v][0]=u;
int dist1=w,dist2=-INF;
d1[v][0]=w,d2[v][0]=-INF;
for(int i=1;i<=16;i++){
int anc=fa[v][i-1];
fa[v][i]=fa[anc][i-1];
int d[4]={d1[v][i-1],d2[v][i-1],d1[anc][i-1],d2[anc][i-1]};
for(int j=0;j<4;j++){
if(dist1<d[j])dist2=dist1,dist1=d[j];
else if(dist1!=d[j]&&dist2<d[j])dist2=d[j];
}
d1[v][i]=dist1;
d2[v][i]=dist2;
}
}
}
}
}
int lca(int a,int b,int w){
static int d[200010];
int cnt=0;
if(depth[a]>depth[b])swap(a,b);
for(int i=16;i>=0;i--){
if(depth[fa[b][i]]>=depth[a]){
d[cnt++]=d1[b][i];
d[cnt++]=d2[b][i];
b=fa[b][i];
}
}
if(a!=b){
for(int i=16;i>=0;i--){
if(fa[a][i]!=fa[b][i]){
d[cnt++]=d1[a][i];
d[cnt++]=d2[a][i];
d[cnt++]=d1[b][i];
d[cnt++]=d2[b][i];
a=fa[a][i];
b=fa[b][i];
}
}
}
d[cnt++]=d1[a][0];
d[cnt++]=d2[a][0];
int dist1=-INF/2,dist2=-INF;
for(int i=0;i<cnt;i++){
if(d[i]>dist1)dist2=dist1,dist1=d[i];
else if(dist1!=d[i]&&d[i]>dist2)dist2=d[i];
}
if(w==dist1)return -dist2+w;
else return -dist1+w;
}
void solve(){
cin>>n>>m;
vector<tuple<int,int,int,bool>>v;
for(int i=1;i<=m;i++){
int a,b,c;cin>>a>>b>>c;
if(a!=b)v.push_back({c,a,b,0});
}
sort(all(v));
for(int i=1;i<=n;i++)p[i]=i;
int res=0;
for(int i=0;i<v.size();i++){
auto &[w,a,b,f]=v[i];
int pa=find(a),pb=find(b);
if(pa!=pb){
p[pa]=pb;
f=1;
res+=w;
}
}
for(int i=0;i<v.size();i++){
auto [w,a,b,f]=v[i];
if(f){
g[a].push_back({b,w});
g[b].push_back({a,w});
}
}
dfs(1);
int ans=INF;
for(int i=0;i<v.size();i++){
auto [w,a,b,f]=v[i];
if(!f)ans=min(ans,res+lca(a,b,w));
}
cout<<ans<<endl;
}
signed main() {
fast
int t=1;//cin>>t;
while(t--) {
solve();
}
return ~~(0^_^0);
}