#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=3e5+10;
int n,m,k;
int vis[N],fa[N];
struct edge{
int u,v,w;
};
vector<edge> e;
bool cmp(edge a,edge b){
return a.w<b.w;
}
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void merge(int x,int y){
x=find(x),y=find(y);
if(x==y) return ;
fa[y]=x;
}
bool ask(int x,int y){
return find(x)==find(y);
}
void solve(){
memset(vis,0,sizeof vis);
memset(fa,0,sizeof fa);
e.clear();
int ans=0,cnt=0,num=0;
cin>>n>>m;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
e.push_back({u,v,w});
}
sort(e.begin(),e.end(),cmp);
for(int i=0;i<m;i++){
int fx=find(e[i].u),fy=find(e[i].v);
if(fx!=fy){
fa[fx]=fy;
ans+=e[i].w;
num++;
vis[++cnt]=i;
if(cnt==n-1) break;
}
}
int flag=1,ANS=2E9;
for(int i=1;i<=cnt;i++){
if(!flag) break;
for(int j=1;j<=n;j++) fa[j]=j;
int ans1=0,num1=0;
for(int j=0;j<m;j++){
if(j==vis[i]) continue;
int fx=find(e[j].u),fy=find(e[j].v);
if(fx!=fy){
fa[fx]=fy;
ans1+=e[j].w;
num1++;
if(num1==n-1&&ans1!=ans) ANS=min(ANS,ans1);
}
}
}
cout<<ANS<<endl;
}
int main(){
int t=1;
while(t--) solve();
return 0;
}