#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define MAX 100100
#define LOG 17
int sum[(int)2e6], lc[(int)2e6], rc[(int)2e6];
int n,q;
vector<tuple<int,int,int> > adj[MAX];
int root[MAX], par[MAX][LOG+1], depth[MAX];
int cur = 0;
ll d[MAX];
int build(int l, int r)
{
int pos = ++cur;
if(l == r){
sum[pos] = 0;
return pos;
}else{
int m = (l+r)>>1;
sum[pos] = 0;
lc[pos] = build(l,m);
rc[pos] = build(m+1,r);
return pos;
}
}
int update(int l, int r, int po, int prev)
{
int pos = ++cur;
if(l == r){
sum[pos] = sum[prev] + 1;
return pos;
}else{
int m = (l+r)>>1;
if(po <= m){
lc[pos] = update(l,m,po,lc[prev]);
rc[pos] = rc[prev];
sum[pos] = sum[lc[pos]] + sum[rc[pos]];
}else{
rc[pos] = update(m+1,r,po,rc[prev]);
lc[pos] = lc[prev];
sum[pos] = sum[lc[pos]] + sum[rc[pos]];
}
return pos;
}
}
int get(int l, int r, int u, int v, int nodl, int nodr)
{
if(r < u || v < l )return 0;
if(u <= l && r <= v) return sum[nodr] - sum[nodl];
int m = (l+r)>>1;
return get(l,m,u,v,lc[nodl],lc[nodr]) + get(m+1,r,u,v,rc[nodl],rc[nodr]);
}
void nhap()
{
cin >> n >> q;
for(int i = 0; i<n-1; i++){
int a,b,c,d; cin >> a >> b >> c >> d;
adj[a].pb(make_tuple(b,c,d));
adj[b].pb(make_tuple(a,c,d));
}
par[1][0] = 0;
depth[1] = 0;
root[0] = build(0,1e5);
root[1] = root[0];
d[1] = 0;
depth[0] = -1;
}
void dfs(int v)
{
for(tuple<int,int,int> u : adj[v]) if(get<0>(u) != par[v][0]){
int _u = get<0>(u);
depth[_u] = depth[v] + 1;
par[_u][0] = v;
root[_u] = update(0,1e5,get<2>(u),root[v]);
d[_u] = d[v] + get<1>(u);
dfs(_u);
}
}
void pre_lca()
{
for(int j = 1; j<=LOG; j++){
for(int i = 1; i<=n; i++) par[i][j] = par[par[i][j-1]][j-1];
}
}
int lca(int u, int v)
{
if(depth[u] < depth[v]) swap(u,v);
for(int i = LOG; i>=0; i--){
if(depth[par[u][i]] >= depth[v]) u = par[u][i];
if(u == v) return u;
}
for(int i = LOG; i>=0; i--){
if(par[u][i] != par[v][i]){
u = par[u][i];
v = par[v][i];
}
}
return par[u][0];
}
void process()
{
nhap();
dfs(1);
pre_lca();
while(q--){
int u,v,k,y; cin >> u >> v >> k >> y;
int a = lca(u,v);
int dem = depth[u] + depth[v] - 2*depth[a] - get(0,1e5,y,y,root[1],root[u]) - get(0,1e5,y,y,root[1],root[v]) + 2*get(0,1e5,y,y,root[1],root[a]);
if(dem <= k){
cout << d[u] + d[v] - 2*d[a] << '\n';
}else{
cout << -1 << '\n';
}
}
}
signed main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
process();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgTUFYIDEwMDEwMAojZGVmaW5lIExPRyAxNwoKaW50IHN1bVsoaW50KTJlNl0sIGxjWyhpbnQpMmU2XSwgcmNbKGludCkyZTZdOwoKaW50IG4scTsKdmVjdG9yPHR1cGxlPGludCxpbnQsaW50PiA+IGFkaltNQVhdOwppbnQgcm9vdFtNQVhdLCBwYXJbTUFYXVtMT0crMV0sIGRlcHRoW01BWF07CmludCBjdXIgPSAwOwpsbCBkW01BWF07CgppbnQgYnVpbGQoaW50IGwsIGludCByKQp7CiAgICBpbnQgcG9zID0gKytjdXI7CiAgICBpZihsID09IHIpewogICAgICAgIHN1bVtwb3NdID0gMDsKICAgICAgICByZXR1cm4gcG9zOwogICAgfWVsc2V7CiAgICAgICAgaW50IG0gPSAobCtyKT4+MTsKICAgICAgICBzdW1bcG9zXSA9IDA7CiAgICAgICAgbGNbcG9zXSA9IGJ1aWxkKGwsbSk7CiAgICAgICAgcmNbcG9zXSA9IGJ1aWxkKG0rMSxyKTsKICAgICAgICByZXR1cm4gcG9zOwogICAgfQp9CgppbnQgdXBkYXRlKGludCBsLCBpbnQgciwgaW50IHBvLCBpbnQgcHJldikKewogICAgaW50IHBvcyA9ICsrY3VyOwogICAgaWYobCA9PSByKXsKICAgICAgICBzdW1bcG9zXSA9IHN1bVtwcmV2XSArIDE7CiAgICAgICAgcmV0dXJuIHBvczsKICAgIH1lbHNlewogICAgICAgIGludCBtID0gKGwrcik+PjE7CiAgICAgICAgaWYocG8gPD0gbSl7CiAgICAgICAgICAgIGxjW3Bvc10gPSB1cGRhdGUobCxtLHBvLGxjW3ByZXZdKTsKICAgICAgICAgICAgcmNbcG9zXSA9IHJjW3ByZXZdOwogICAgICAgICAgICBzdW1bcG9zXSA9IHN1bVtsY1twb3NdXSArIHN1bVtyY1twb3NdXTsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgcmNbcG9zXSA9IHVwZGF0ZShtKzEscixwbyxyY1twcmV2XSk7CiAgICAgICAgICAgIGxjW3Bvc10gPSBsY1twcmV2XTsKICAgICAgICAgICAgc3VtW3Bvc10gPSBzdW1bbGNbcG9zXV0gKyBzdW1bcmNbcG9zXV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3M7CiAgICB9Cn0KCmludCBnZXQoaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYsIGludCBub2RsLCBpbnQgbm9kcikKewogICAgaWYociA8IHUgfHwgdiA8IGwgKXJldHVybiAwOwogICAgaWYodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHN1bVtub2RyXSAtIHN1bVtub2RsXTsKICAgIGludCBtID0gKGwrcik+PjE7CiAgICByZXR1cm4gZ2V0KGwsbSx1LHYsbGNbbm9kbF0sbGNbbm9kcl0pICsgZ2V0KG0rMSxyLHUsdixyY1tub2RsXSxyY1tub2RyXSk7Cn0KCnZvaWQgbmhhcCgpCnsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IoaW50IGkgPSAwOyBpPG4tMTsgaSsrKXsKICAgICAgICBpbnQgYSxiLGMsZDsgY2luID4+IGEgPj4gYiA+PiBjID4+IGQ7CiAgICAgICAgYWRqW2FdLnBiKG1ha2VfdHVwbGUoYixjLGQpKTsKICAgICAgICBhZGpbYl0ucGIobWFrZV90dXBsZShhLGMsZCkpOwogICAgfQogICAgcGFyWzFdWzBdID0gMDsKICAgIGRlcHRoWzFdID0gMDsKICAgIHJvb3RbMF0gPSBidWlsZCgwLDFlNSk7CiAgICByb290WzFdID0gcm9vdFswXTsKICAgIGRbMV0gPSAwOwogICAgZGVwdGhbMF0gPSAtMTsKfQoKdm9pZCBkZnMoaW50IHYpCnsKICAgIGZvcih0dXBsZTxpbnQsaW50LGludD4gdSA6IGFkalt2XSkgaWYoZ2V0PDA+KHUpICE9IHBhclt2XVswXSl7CiAgICAgICAgaW50IF91ID0gZ2V0PDA+KHUpOwogICAgICAgIGRlcHRoW191XSA9IGRlcHRoW3ZdICsgMTsKICAgICAgICBwYXJbX3VdWzBdID0gdjsKICAgICAgICByb290W191XSA9IHVwZGF0ZSgwLDFlNSxnZXQ8Mj4odSkscm9vdFt2XSk7CiAgICAgICAgZFtfdV0gPSBkW3ZdICsgZ2V0PDE+KHUpOwogICAgICAgIGRmcyhfdSk7CiAgICB9Cn0KCnZvaWQgcHJlX2xjYSgpCnsKICAgIGZvcihpbnQgaiA9IDE7IGo8PUxPRzsgaisrKXsKICAgICAgICBmb3IoaW50IGkgPSAxOyBpPD1uOyBpKyspIHBhcltpXVtqXSA9IHBhcltwYXJbaV1bai0xXV1bai0xXTsKICAgIH0KfQoKaW50IGxjYShpbnQgdSwgaW50IHYpCnsKICAgIGlmKGRlcHRoW3VdIDwgZGVwdGhbdl0pIHN3YXAodSx2KTsKICAgIGZvcihpbnQgaSA9IExPRzsgaT49MDsgaS0tKXsKICAgICAgICBpZihkZXB0aFtwYXJbdV1baV1dID49IGRlcHRoW3ZdKSB1ID0gcGFyW3VdW2ldOwogICAgICAgIGlmKHUgPT0gdikgcmV0dXJuIHU7CiAgICB9CiAgICBmb3IoaW50IGkgPSBMT0c7IGk+PTA7IGktLSl7CiAgICAgICAgaWYocGFyW3VdW2ldICE9IHBhclt2XVtpXSl7CiAgICAgICAgICAgIHUgPSBwYXJbdV1baV07CiAgICAgICAgICAgIHYgPSBwYXJbdl1baV07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhclt1XVswXTsKfQoKCgp2b2lkIHByb2Nlc3MoKQp7CiAgICBuaGFwKCk7CiAgICBkZnMoMSk7CiAgICBwcmVfbGNhKCk7CiAgICB3aGlsZShxLS0pewogICAgICAgIGludCB1LHYsayx5OyBjaW4gPj4gdSA+PiB2ID4+IGsgPj4geTsKICAgICAgICBpbnQgYSA9IGxjYSh1LHYpOwogICAgICAgIGludCBkZW0gPSBkZXB0aFt1XSArIGRlcHRoW3ZdIC0gMipkZXB0aFthXSAtIGdldCgwLDFlNSx5LHkscm9vdFsxXSxyb290W3VdKSAtIGdldCgwLDFlNSx5LHkscm9vdFsxXSxyb290W3ZdKSArIDIqZ2V0KDAsMWU1LHkseSxyb290WzFdLHJvb3RbYV0pOwogICAgICAgIGlmKGRlbSA8PSBrKXsKICAgICAgICAgICAgY291dCA8PCBkW3VdICsgZFt2XSAtIDIqZFthXSA8PCAnXG4nOwogICAgICAgIH1lbHNlewogICAgICAgICAgICBjb3V0IDw8IC0xIDw8ICdcbic7CiAgICAgICAgfQogICAgfQp9CgpzaWduZWQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7CiAgICBwcm9jZXNzKCk7CiAgICByZXR1cm4gMDsKfQo=