#include <bits/stdc++.h> using namespace std; const int M=10005; const int N=10005; #define ri register int struct setdian{ int to,val,net; }bian[M]; int head[N],cent,dfn[N],low[N],leve,color[M],tim,stk[M],top,cost[M],ans; void add(int a,int b,int c) { bian[++cent].net=head[a],head[a]=cent; bian[cent].to=b;bian[cent].val=c; // } void dfs1(int u,int f) { low[u]=dfn[u]=++tim; stk[top++]=u; for(ri i=head[u];i;i=bian[i].net) { int v=bian[i].to; if(dfn[v]==0) { dfs1(v,i); low[u]=min(low[u],low[v]); } else if((i^1)!=f) low[u]=min(low[u],dfn[v]); } if(low[u]==dfn[u]) { leve++; while(top>0) { int v=stk[--top]; color[v]=leve; if(v==u) break; } } } int n,m; int main(){ while(scanf("%d%d",&n,&m)!=-1) //qing 0 /zui da { memset(head,0,sizeof head); memset(stk,0,sizeof stk); memset(dfn,0,sizeof dfn); memset(low,0,sizeof low); memset(bian,0,sizeof bian); memset(color,0,sizeof color); top=cent=tim=leve=ans=0; for(ri i=0;i<=n;i++) cost[i]=INT_MAX; for(ri i=1;i<=m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); add(a,b,c); } for(ri i=0;i<n;i++) { if(dfn[i]==0) dfs1(i,0); } for(ri i=0;i<n;i++) for(ri j=head[i];j;j=bian[j].net) { int v=bian[j].to,w=bian[j].val; if(color[v]!=color[i]) { cost[color[v]]=min(cost[color[v]],w); //cout<<color[v]<<endl; } } //cout<<"lalal"<<" "<<color[0]<<endl; for(ri i=1;i<=leve;i++) { if(cost[i]!=INT_MAX&&i!=color[0]) ans+=cost[i]; } printf("%d\n",ans); } return 0; }