#include <bits/stdc++.h>
#define INF 0x3f3f3f;
using namespace std;
int n,m;
const int N=1e3+10,M=1e5+10;
struct node{
int ne,to,w;
} e[M],fe[M];
int idx=1,fidx=1;
int h[N],fh[N];
int vi[N],fvi[N];
int d[N],fd[N];
void add(int a,int b ,int c){
e[idx].to=b;
e[idx].w=c;
e[idx].ne=h[a];
h[a]=idx++;
}
void fadd(int a,int b,int c){
fe[fidx].to=b;
fe[fidx].w=c;
fe[fidx].ne=fh[a];
fh[a]=fidx++;
}
void dij(int s)
{
for(int i=1;i<=n;i++) d[i]=INF;
d[s]=0;
for(int i=1;i<=n;i++)
{
int t=-1;
for(int j=1;j<=n;j++)
if(!vi[j] && (t==-1 || d[j]<d[t]) )
t=j;
vi[t]=1;
for(int j=h[t]; j!=-1;j=e[j].ne )
{
int x=e[j].to;
int w=e[j].w;
d[x]=min(d[x],d[t]+w);
}
}
}
void fdij(int s)
{
for(int i=1;i<=n;i++) fd[i]=INF;
fd[s]=0;
for(int i=1;i<=n;i++)
{
int t=-1;
for(int j=1;j<=n;j++)
if(!fvi[j] && (t==-1 || fd[j]<fd[t]) )
t=j;
fvi[t]=1;
for(int j=fh[t]; j!=-1;j=fe[j].ne)
{
int x=fe[j].to;
int w=fe[j].w;
fd[x]=min(fd[x],fd[t]+w);
}
}
}
int main(){
memset(h,-1,sizeof h);
memset(fh,-1,sizeof fh);
cin>>n>>m;
while(m--)
{
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
fadd(v,u,w);
}
dij(1);
fdij(1);
int ans=0;
for(int i=2;i<=n;i++) ans += d[i]+fd[i];
cout<<ans;
return 0;
}