#include <bits/stdc++.h>
using namespace std;
int cnt,f[500050][50],head[500050],d[500050],vis[500050];
float lg;
struct edge
{
int to;
int nex;
}e[50000100];
inline void add(int a,int b)
{
++cnt;
e[cnt].to=b;
e[cnt].nex=head[a];
head[a]=cnt;
}
inline void dfs(int u,int fa)
{
d[u]=d[fa]+1;
f[u][0]=fa;
for(register int i=1;i<=lg;i++)
f[u][i]=f[f[u][i-1]][i-1];
for(register int i=head[u];i;i=e[i].nex)
{
int v=e[i].to;
if(v!=fa)
dfs(v,u);
}
}
inline int l(int x,int y)
{
if(d[x]>d[y]) swap(x,y);
for(register int i=lg;i>=0;i--)
if(d[x]<=d[y]-(1<<i))
y=f[y][i];
if(x==y)
return x;
for(register int i=lg;i>=0;i--)
{
if(f[x][i]==f[y][i])
continue;
else
{
x=f[x][i];
y=f[y][i];
}
}
return f[x][0];
}
//int dis(int x,int y)
//{
// int ccc=l(x,y);
// return d[x]-d[ccc]+d[y]-d[ccc];
//}
int main()
{
int m,n,q,s,e,a1,b1,c1,d1,f1,f2,root;
cin>>n>>m;
for(int i=1;i<=n-1;i++)
{
cin>>s>>e;
add(s,e);
add(e,s);
vis[i]=true;
}
for(int i=1;i<=n;i++)
{
if(vis[i]==false)
{
root=i;
break;
}
}
dfs(root,0);
for(int op=1;op<=m;op++)
{
cin>>a1>>b1>>c1>>d1;
f1=l(a1,b1);
f2=l(c1,d1);
if(f1==f2)
{
cout<<"Y"<<endl;
continue;
}
if(dis(a1,b1)+dis(c1,d1)>=dis(a1,c1)+dis(b1,d1))
cout<<"Y"<<endl;
else
cout<<"N"<<endl;
}
return 0;
}