#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e18;
const int MOD = 1e9+7;
const int MAXN = 2e5;
typedef tuple<int, int, int> ti3;
int n, m;
vector<ti3> adj[MAXN+5];
int par[MAXN+5];
multiset<pair<int, int>> mlst;
int ans[MAXN+5];
void dfs(int cur){
int idx = 0;
for(auto [l, r] : mlst){
if(idx > r) continue;
idx = max(l, idx);
ans[cur] += r - idx + 1;
idx = r + 1;
}
for(auto [next, l, r] : adj[cur]){
if(next == par[cur]) continue;
mlst.insert({l, r});
par[next] = cur;
dfs(next);
mlst.erase(mlst.find({l, r}));
}
}
void solve(){
cin >> n >> m;
for(int i = 1; i <= n-1; i++){
int u, v, l, r; cin >> u >> v >> l >> r;
adj[u].push_back({v, l, r});
adj[v].push_back({u, l, r});
}
dfs(1);
for(int i = 2; i <= n; i++) cout << ans[i] << endl;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int tc = 1;
// cin >> tc;
while(tc--){
solve();
}
return 0;
}
/*
6 6
1 2 2 4
1 3 1 4
2 4 3 5
2 5 5 6
3 6 2 3
=>
3
4
4
5
4
5 6
1 2 2 2
2 3 3 3
3 5 1 5
3 4 1 1
=>
1
2
3
5
*/