#include<bits/stdc++.h>
using namespace std;
const int N=600050;
const int M=600050;
const int INF=0x3f3f3f3f;
struct node1
{
int nxt;
int to;
long long wei;
}ed[2*M];
long long dp[2][N][35];
int fath[N][35];
int deep[N];
struct node
{
int x,y;
long long z;
bool vis;
}e[M];
bool cmp(node a,node b)
{
return a.z<b.z;
}
int n,m;
int head[M];
int fa[M];
long long val1,val2;
int find(int x)
{
if(fa[x]==x)return x;
else return fa[x]=find(fa[x]);
}
int cnt;
void add(int x,int y,long long z)
{
ed[++cnt].nxt=head[x];
head[x]=cnt;
ed[cnt].to=y;
ed[cnt].wei=z;
}
void join(int x,int y)
{
int f1=find(x);
int f2=find(y);
if(f1!=f2)
{
fa[f1]=f2;
}
}
long long ans;
void kk()
{
sort(e+1,e+1+m,cmp);
for(int i=1;i<=m;i++)
{
int u=find(e[i].x);
int v=find(e[i].y);
if(u==v)continue;
ans+=e[i].z;
e[i].vis=1;
join(u,v);
add(e[i].x,e[i].y,e[i].z);
add(e[i].y,e[i].x,e[i].z);
}
//cout<<ans;
}
void bfs()
{
deep[1]=0;
queue<int>q;
q.push(1);
while(q.size())
{
int x=q.front();
q.pop();
int len=log2(deep[x]+1);
//cout<<len;
for(int i=head[x];i;i=ed[i].nxt)
{
int y=ed[i].to;
//cout<<fath[y][0]<<endl;
if(y==fath[x][0])continue;
fath[y][0]=x;
deep[y]=deep[x]+1;
dp[0][y][0]=ed[i].wei;
dp[1][y][0]=-INF;
q.push(y);
for(int t=1;t<=len;t++)
{
fath[y][t]=fath[fath[y][t-1]][t-1];
if(dp[0][y][t-1]!=dp[0][fath[y][t-1]][t-1])
{
dp[0][y][t]=max(dp[0][y][t-1],dp[0][fath[y][t-1]][t-1]);
if(dp[0][y][t-1]>dp[0][fath[y][t-1]][t-1])
{
dp[1][y][t]=max(dp[1][y][t-1],dp[0][fath[y][t-1]][t-1]);
}
else
{
dp[1][y][t]=max(dp[0][y][t-1],dp[1][fath[y][t-1]][t-1]);
}
}
else
{
dp[0][y][t]=dp[0][y][t-1];
if(dp[1][y][t-1]!=-INF||dp[1][fath[y][t-1]][t-1]!=-INF)dp[1][y][t]=max(dp[1][y][t-1],dp[1][fath[y][t-1]][t-1]);
}
}
}
}
}
void compare1(long long x)
{
if(x>val1)
{
val2=val1;
val1=x;
}
else if(x>val2&&x!=val1)
{
val2=x;
}
}
void compare(int a,int b)
{
compare1(dp[0][a][b]);
compare1(dp[1][a][b]);
}
void lca(int x,int y)
{
val1=val2=-INF;
if(deep[y]>deep[x])
{
swap(x,y);
}
while(deep[x]>deep[y])
{
int t=log2(deep[x]-deep[y]);
compare(x,t);
x=fath[x][t];
}
if(x==y)return;
int len1=log2(deep[x]);
for(int i=len1;i>=0;i--)
{
if(fath[x][i]!=fath[y][i])
{
compare(x,i);
compare(y,i);
x=fath[x][i];
y=fath[y][i];
}
}
compare(x,0);
compare(y,0);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)fa[i]=i;
for(int i=1;i<=m;i++)
{
scanf("%d%d%lld",&e[i].x,&e[i].y,&e[i].z);
}
kk();
bfs();
long long anss=INF;
for(int i=1;i<=m;i++)
{
//
if(!e[i].vis)
{
lca(e[i].x,e[i].y);
//cout<<val1<<val2;
if(val1!=e[i].z)
{
//cout<<1111;
anss=min(ans-val1+e[i].z,anss);
}
else anss=min(anss,ans-val2+e[i].z);
}
}
printf("%lld",anss);
return 0;
}