#include <iostream>
#include <algorithm>
using namespace std;
struct edge
{
int d,s;
int w,k;
};
bool gt(edge a,edge b)
{
return a.w<b.w;
}
edge e[3000001];
int check[3000001];
int find(int x)
{
if(x==check[x])
{
return x;
}
check[x]=find(check[x]);
return check[x];
}
int main()
{
int n,m,index1,index2,mst;
long long sum;
while(cin>>n>>m)
{
sum=0;
mst=n;
for(int i=0;i<m;++i)
{
cin>>e[i].s>>e[i].d>>e[i].w>>e[i].k;
e[i].w-=e[i].k;
}
for(int i=0;i<=n;++i)
{
check[i]=i;
}
sort(e,e+m,gt);
for(int i=0;i<m;++i)
{
index1=find(e[i].s);
index2=find(e[i].d);
if(index1!=index2)
{
check[index1]=index2;
sum+=e[i].w;
}
else if(e[i].w<0)
{
sum+=e[i].w;
}
}
cout<<sum<<endl;
}
}