#include<bits/stdc++.h>
using namespace std;
int n,m;
struct edge{
int to,w;
};
vector <edge> v[100001],v1[100001];
int head[1001],cnt,f[1001],book[1001],sum;
queue <int> q;
int main()
{
memset(f,127,sizeof(f));
cin>>n>>m;
int a,b,c;
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&a,&b,&c);
v[a].push_back((edge){b,c});
}
q.push(1);
f[1]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
if(book[x]==1)
continue;
book[x]=1;
int to,w;
for(int i=0;i<v[x].size();i++)
{
to=v[x][i].to;
w=v[x][i].w;
f[to]=min(f[to],f[x]+w);
q.push(to);
}
}
for(int i=2;i<=n;i++)
sum+=f[i];
memset(f,127,sizeof(f));
memset(book,0,sizeof(book));
for(int i=1;i<=n;i++)
{
for(int j=0;j<v[i].size();j++)
{
v1[v[i][j].to].push_back((edge){i,v[i][j].w});
}
}
q.push(1);
f[1]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
if(book[x]==1)
continue;
int to,w;
for(int i=0;i<v1[x].size();i++)
{
to=v1[x][i].to;
w=v1[x][i].w;
f[to]=min(f[to],f[x]+w);
book[x]=1;
q.push(to);
}
}
for(int i=2;i<=n;i++)
sum+=f[i];
cout<<sum;
}