#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
int n,q,f[N][30],dep[N];
vector<int> e[N];
inline int read(){
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void dfs(int u,int father){
f[u][0]=father;
dep[u]=dep[father]+1;
for(auto i:e[u]){
if(i!=father) dfs(i,u);
}
}
int lca(int u,int v){
if(dep[u]<dep[v]) swap(u,v);
for(int i=22;i>=0;i--){
if(dep[f[u][i]]>=dep[v]) u=f[u][i];
}
if(u==v) return u;
for(int i=20;i>=0;i--){
if(f[u][i]!=f[v][i]){
u=f[u][i];
v=f[v][i];
}
}
return f[u][0];
}
int cf(int a,int b,int c,int d){
int l_max=max({dep[lca(a,c)],dep[lca(a,d)],dep[lca(b,c)],dep[lca(b,d)]});
if(l_max==dep[lca(a,c)]) return lca(a,c);
if(l_max==dep[lca(a,d)]) return lca(a,d);
if(l_max==dep[lca(b,c)]) return lca(b,c);
if(l_max==dep[lca(b,d)]) return lca(b,d);
return -1;
}
int main(){
cin>>n>>q;
for(int i=1;i<n;i++){
int x=read(),y=read();
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1,0);
for(int j=1;(1<<j)<=n;j++){
for(int i=1;i<=n;i++){
f[i][j]=f[f[i][j-1]][j-1];
}
}
for(int i=1;i<=q;i++){
int a=read(),b=read(),c=read(),d=read();
int l_1=lca(a,b),l_2=lca(c,d);
int l_max=cf(a,b,c,d);
if(dep[l_max]>dep[l_1]&&dep[l_max]>dep[l_2]){
cout<<"Y\n";
}else{
cout<<"N\n";
}
}
return 0;
}