#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,w,dis[1000005],f[1000005],ans;
struct e{
int v,w;
bool operator<(const e &a)const{
return this->w<a.v;
}
};
vector<e>e1[1000005],e2[1000005];
void dijkstra1(){
memset(dis,0x3f,sizeof(dis));
priority_queue<e>q;
q.push({1,0});
dis[1]=0;
while(q.size()){
u=q.top().v;
q.pop();
if(f[u])continue;
f[u]=1;
for(auto &i:e1[u])
if(dis[i.v]>dis[u]+i.w){
dis[i.v]=dis[u]+i.w;
q.push({i.v,-dis[i.v]});
}
}
}
void dijkstra2(){
memset(f,0,sizeof(f));
memset(dis,0x3f,sizeof(dis));
priority_queue<e>q;
q.push({1,0});
dis[1]=0;
while(q.size()){
u=q.top().v;
q.pop();
if(f[u])continue;
f[u]=1;
for(auto &i:e2[u])
if(dis[i.v]>dis[u]+i.w){
dis[i.v]=dis[u]+i.w;
q.push({i.v,-dis[i.v]});
}
}
}
int main(){
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d%d",&u,&v,&w);
e1[u].push_back({v,w});
e2[v].push_back({u,w});
}
dijkstra1();
for(int i=1;i<=n;i++)ans+=dis[i];
dijkstra2();
for(int i=1;i<=n;i++)ans+=dis[i];
printf("%d",ans);
return 0;
}