#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=400005,INF=1e12;
int n,m;
struct Node {
int u,v,r,p;
};
vector<Node> vec[N],fvec[N];
Node arr[N];
bool cmp(Node a,Node b) {return a.r>b.r;}
int out[N],cost[N];
void del(int u) {
for(auto to:fvec[u]) {
if(!out[to.v]) continue;
cost[to.v]=min(cost[to.v],max(cost[u]-to.p,to.r));
out[to.v]--;
if(!out[to.v]) del(to.v);
}
}
queue<int> que;
void topsort() {
for(int i=1;i<=n;++i)
if(out[i]==0) que.push(i);
int u;
while(!que.empty()) {
u=que.front();
que.pop();
for(auto to:fvec[u]) {
if(!out[to.v]) continue;
out[to.v]--;
if(!out[to.v]) que.push(to.v);
}
}
}
signed main() {
cin >> n >> m;
for(int i=1;i<=n;++i) cost[i]=INF;
int a,b,r,p;
for(int i=1;i<=m;++i) {
cin >> a >> b >> r >> p;
vec[a].push_back({a,b,r,p});
fvec[b].push_back({b,a,r,p});
arr[i]={a,b,r,p};
out[a]++;
}
sort(arr+1,arr+1+m,cmp);
topsort();
int u,v;
for(int i=1;i<=m;++i) {
u=arr[i].u,v=arr[i].v;
if(out[v]==0 || out[u]==0) continue;
cost[u]=min(cost[u],arr[i].r);
out[u]--;
if(!out[u])
del(u);
}
for(int i=1;i<=n;++i) {
if(cost[i]!=INF) cout << cost[i] << ' ';
else cout << -1 << ' ';
}
return 0;
}