record
#include<bits/stdc++.h>
const int N = 1e5 + 10;
int n, q;
int head[N], nxt[N << 1], to[N << 1];
int edge_cnt;
int anc[N][21];
int dep[N];
using namespace std;
void add_edge(int x, int y)
{
nxt[++edge_cnt] = head[x];
to[edge_cnt] = y;
head[x] = edge_cnt;
}
void dfs(int u, int fa, int depth)
{
dep[u] = depth;
anc[u][0] = fa;
for(int i = head[u];i != 0;i = nxt[i])
{
int t = to[i];
if(t == fa) continue;
dfs(t, u, depth + 1);
}
}
void init()
{
for(int k = 20;k >= 1;k--)
{
for(int i = 1;i <= n;i++)
{
anc[i][k] = anc[anc[i][k - 1]][k - 1];
}
}
}
int lca(int a, int b)
{
if(dep[a] < dep[b]) swap(a, b);
for(int k = 20;k >= 0;k--)
{
if(dep[anc[a][k]] >= dep[b]) a = anc[a][k];
}
if(a == b) return a;
for(int k = 20;k >= 0;k--)
{
if(anc[a][k] != anc[b][k]) a = anc[a][k], b = anc[b][k];
}
return anc[a][0];
}
int dis(int x, int y)
{
int lcaa = lca(x, y);
return abs(dep[lcaa] - dep[x]) + abs(dep[lcaa] - dep[y]);
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> q;
int u, v;
for(int i = 1;i <= n - 1;i++)
{
cin >> u >> v;
add_edge(u, v), add_edge(v, u);
}
dfs(1, 0, 1);
int a, b, c, d;
init();
while(q --)
{
cin >> a >> b >> c >> d;
int x = lca(a, b), y = lca(c, d);
if(dis(a, y) + dis(b, y) == dis(a, b) || dis(c, x) + dis(d, x) == dis(c, d))
cout<<"Y\n";
else cout << "N\n";
}
return 0;
}