#include<iostream>
using namespace std;
#define maxn 100010
int anc[maxn][19];
int n,q;
int head[maxn],cnt=0;
int dep[maxn];
bool vis[maxn];
struct E{
int nxt,to;
}e[maxn*2];
void add(int a,int b){
e[++cnt].to=b;
e[cnt].nxt=head[a];
head[a]=cnt;
}
void dfs(int u,int fa){
dep[u]=dep[fa]+1;
anc[u][0]=fa;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(v==fa)continue;
dfs(v,u);
}
}
void init(){
for(int j=1;j<19;j++){
for(int i=1;i<=n;i++){
anc[i][j]=anc[anc[i][j-1]][j-1];
}
}
}
int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y);
for(int i=18;i>=0;i--){
if(dep[anc[x][i]]>=dep[y])x=anc[x][i];
}
if(x==y)return x;
for(int i=18;i>=0;i--){
if(anc[x][i]!=anc[y][i]){
x=anc[x][i];
y=anc[y][i];
}
}
return anc[x][0];
}
int cal(int x,int y){
int c=lca(x,y);
return abs(dep[c]-dep[x])+abs(dep[c]-dep[y]);
}
int main(){
cin>>n>>q;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
dfs(1,0);
init();
while(q--){
int a,b,c,d;
cin>>a>>b>>c>>d;
int x=lca(a,b);int y=lca(c,d);
if(cal(x,c)+cal(x,d)==cal(c,d))cout<<"Y"<<endl;
else if(cal(y,a)+cal(y,b)==cal(a,b))cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
return 0;
}
把maxn改成200010就过了,100010反而会mle???