#include <bits/stdc++.h>
#define name "test"
#define FOR(i, a, b) for (int i = a; i <= b; i++)
#define ll long long
#define fi first
#define se second
#define ii pair <int, int>
#define sz(a) a.size()
#define pb push_back
#define mingdu signed main()
using namespace std;
const int N = 1e6 + 5, LOG = 19;
vector <int> a[N];
int n, q, h[N], par[N][20];
void nhap() {
cin >> n >> q;
FOR(i, 1, n - 1) {
int u, v;
cin >> u >> v;
a[u].pb(v);
a[v].pb(u);
}
memset(h, -1, sizeof(h));
h[1] = 0;
}
void dfs(int u) {
FOR(i, 1, LOG) par[u][i] = par[par[u][i - 1]][i - 1];
for (int v : a[u]) {
if (h[v] == -1) {
h[v] = h[u] + 1;
par[v][0] = u;
dfs(v);
}
}
}
int lca(int u, int v) {
if (h[u] < h[v]) swap(u, v);
int w = h[u] - h[v];
for (int i = LOG; i >= 0; i--)
if ((w >> i) & 1)
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];
}
int weight(int u, int v) {
return h[u] + h[v] - 2 * h[lca(u, v)];
}
bool check(int u, int v, int w) {
return weight(u, w) + weight(v, w) == weight(u, v);
}
void giai() {
dfs(1);
while (q--) {
int u, v, w;
cin >> u >> v >> w;
cout << check(u, v, w) << "\n";
}
}
mingdu {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(name".inp", "r")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
nhap();
giai();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIG5hbWUgInRlc3QiCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvciAoaW50IGkgPSBhOyBpIDw9IGI7IGkrKykKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGlpIHBhaXIgPGludCwgaW50PgojZGVmaW5lIHN6KGEpIGEuc2l6ZSgpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbWluZ2R1IHNpZ25lZCBtYWluKCkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDFlNiArIDUsIExPRyA9IDE5Owp2ZWN0b3IgPGludD4gYVtOXTsKaW50IG4sIHEsIGhbTl0sIHBhcltOXVsyMF07Cgp2b2lkIG5oYXAoKSB7CiAgICBjaW4gPj4gbiA+PiBxOwogICAgRk9SKGksIDEsIG4gLSAxKSB7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICAKICAgICAgICBhW3VdLnBiKHYpOwogICAgICAgIGFbdl0ucGIodSk7CiAgICB9CiAgICAKICAgIG1lbXNldChoLCAtMSwgc2l6ZW9mKGgpKTsKICAgIGhbMV0gPSAwOwp9Cgp2b2lkIGRmcyhpbnQgdSkgewogICAgRk9SKGksIDEsIExPRykgcGFyW3VdW2ldID0gcGFyW3Bhclt1XVtpIC0gMV1dW2kgLSAxXTsKICAgIAogICAgZm9yIChpbnQgdiA6IGFbdV0pIHsKICAgICAgICBpZiAoaFt2XSA9PSAtMSkgewogICAgICAgICAgICBoW3ZdID0gaFt1XSArIDE7CiAgICAgICAgICAgIHBhclt2XVswXSA9IHU7CiAgICAgICAgICAgIGRmcyh2KTsKICAgICAgICB9CiAgICB9Cn0KCmludCBsY2EoaW50IHUsIGludCB2KSB7CiAgICBpZiAoaFt1XSA8IGhbdl0pIHN3YXAodSwgdik7CiAgICAKICAgIGludCB3ID0gaFt1XSAtIGhbdl07CgogICAgZm9yIChpbnQgaSA9IExPRzsgaSA+PSAwOyBpLS0pIAogICAgICAgIGlmICgodyA+PiBpKSAmIDEpCiAgICAgICAgICAgIHUgPSBwYXJbdV1baV07CiAgICAKICAgIGlmICh1ID09IHYpIHJldHVybiB1OwogICAgCiAgICBmb3IgKGludCBpID0gTE9HOyBpID49IDA7IGktLSkgewogICAgICAgIGlmIChwYXJbdV1baV0gIT0gcGFyW3ZdW2ldKSB7CiAgICAgICAgICAgIHUgPSBwYXJbdV1baV07CiAgICAgICAgICAgIHYgPSBwYXJbdl1baV07CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gcGFyW3VdWzBdOwp9CgppbnQgd2VpZ2h0KGludCB1LCBpbnQgdikgewogICAgcmV0dXJuIGhbdV0gKyBoW3ZdIC0gMiAqIGhbbGNhKHUsIHYpXTsKfQoKYm9vbCBjaGVjayhpbnQgdSwgaW50IHYsIGludCB3KSB7CiAgICByZXR1cm4gd2VpZ2h0KHUsIHcpICsgd2VpZ2h0KHYsIHcpID09IHdlaWdodCh1LCB2KTsKfQoKdm9pZCBnaWFpKCkgewogICAgZGZzKDEpOwogICAgCiAgICB3aGlsZSAocS0tKSB7CiAgICAgICAgaW50IHUsIHYsIHc7CiAgICAgICAgY2luID4+IHUgPj4gdiA+PiB3OwogICAgICAgIAogICAgICAgIGNvdXQgPDwgY2hlY2sodSwgdiwgdykgPDwgIlxuIjsKICAgIH0KfQoKbWluZ2R1IHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpZiAoZm9wZW4obmFtZSIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4obmFtZSIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihuYW1lIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgbmhhcCgpOwogICAgZ2lhaSgpOwoKICAgIHJldHVybiAwOwp9