讨论区也没有找到和我错误点一样的于是来求救了。。。。。。。。
额。。。
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <istream>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <string.h>
#include <map>
#define int long long
#define inlind inline void
#define inlinl inline bool
#define inlint inline int
#define inlinc inline char
#define inlins inline string
#define mem0(a) memset(a,0,sizeof(a))
#define memf(a) memset(a,0x3f,sizeof(a))
#define mem_f(a) memset(a,0x80,sizeof(a))
#define mem_1(a) memset(a,-1,sizeof(a))
#define pb(a,b) a.push_back(b)
#define mp(a,b) make_pair(a,b)
#define p1(x) x.first
#define p2(x) x.second
using namespace std;
const int INF=0x7fffffffffffff;
vector<pair<int,int > >g[100030];
int fa[100030],f[100030][32][2],fw[100030][32];//fa并查集,f是倍增最大值,fw是倍增祖先
int dep[100030];
struct edge{int u,v,w;
bool ch;
inlind in(){
scanf("%lld%lld%lld",&u,&v,&w);
}
}e[610000];
inlinl cmp(edge x,edge y){
return x.w<y.w;
}
int n,m;
inlint ff(int x){
if(fa[x]==x) return x;
return fa[x]=ff(fa[x]);
}
inlind merge(int x,int y){
int mx=ff(x),my=ff(y);
if(mx!=my) fa[mx]=my;
}
inlinl check(int x ,int y){
int mx=ff(x),my=ff(y);
return mx==my;
}
inlind dfs(int id,int ffa,int d){
dep[id]=d;
for(int i=1;(1<<i)<=dep[id];i++){
fw[id][i]=fw[fw[id][i-1]][i-1];
f[id][i][1]=max(f[ fw[id][i-1] ][i-1][1],f[id][i-1][1]);
if(f[fw[id][i-1]][i-1][1]!=f[id][i-1][1])
f[id][i][0]=min(f[ fw[id][i-1] ][i-1][1],f[id][i-1][1]);
else
f[id][i][0]=max(f[ fw[id][i-1] ][i-1][0],f[id][i-1][0]);
}
int k=g[id].size();
for(int i=0;i<k;i++){
int v=p1(g[id][i]),w=p2(g[id][i]);
if(v==ffa)continue;
f[v][0][1]=w;
f[v][0][0]=-INF;
fw[v][0]=id;
dfs(v,id,d+1);
}
}
inline pair<int,int> lca(int x,int y){
if(dep[x]<dep[y]) swap(x,y);
int maxa1=-INF,maxa2=-INF;
for(int i=30;i>=0;i--){
if((1<<i)<=dep[x]&&dep[fw[x][i]]>=dep[y]) {
if(f[x][i][1]>maxa1){
maxa2=maxa1;
maxa1=f[x][i][1];
}
else if(f[x][i][1]>maxa2&&f[x][i][1]!=maxa1)maxa2=f[x][i][1];
else maxa2=max(maxa2,f[x][i][0]);
x=fw[x][i];
}
}
if(x==y) return mp(maxa1,maxa2);
for(int i=30;i>=0;i--){
if(dep[x]>=(1<<i)&&(fw[x][i]!=fw[y][i]||i==0)){
if(f[y][i][1]>maxa1){
maxa2=maxa1;
maxa1=f[y][i][1];
}
else if(f[y][i][1]>maxa2&&f[y][i][1]!=maxa1)maxa2=f[y][i][1];
else maxa2=max(maxa2,f[y][i][0]);
y=fw[y][i];
if(f[x][i][1]>maxa1){
maxa2=maxa1;
maxa1=f[x][i][1];
}
else if(f[x][i][1]>maxa2&&f[x][i][1]!=maxa1)maxa2=f[x][i][1];
else maxa2=max(maxa2,f[x][i][0]);
x=fw[x][i];
}
}
return mp(maxa1,maxa2);
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
fa[i]=i;
}
int ans1=0,ans2=INF;
for(int i=1;i<=m;i++)e[i].in();
sort(e+1,e+m+1,cmp);
for(int i=1;i<=m;i++){
int u=e[i].u,v=e[i].v,w=e[i].w;
if(!check(u,v)&&u!=v){
e[i].ch=1;
merge(u,v);
ans1+=w;
pb(g[u],mp(v,w));
pb(g[v],mp(u,w));
}
}
dfs(1,-1,1);
for(int i=1;i<=m;i++){
if(e[i].ch||e[i].u==e[i].v) continue;
pair<int,int> ko=lca(e[i].u,e[i].v);
if(p1(ko)==e[i].w){
if(p2(ko)!=e[i].w)
ans2=min(ans2,ans1+e[i].w-p2(ko));
}
else ans2=min(ans2,ans1+e[i].w-p1(ko));
// cout<<p1(ko)<< " "<<p2(ko)<<endl;
}
cout<<ans2;
return 0;
}