#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int n,q,head[1000010],cnt,s[1000010];
struct node{
int to,nxt,val;
}edge[2000010];
void add(int u,int v,int w){
edge[++cnt]=(node){v,head[u],w};
head[u]=cnt;
}
void dfs(int u,int f){
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].to;
if(v==f)continue;
s[v]=s[u]^edge[i].val;
dfs(v,u);
}
}
signed main(){
scanf("%lld%lld",&n,&q);
for(int i=1;i<n;i++){
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);add(v,u,w);
}
dfs(1,0);
while(q--){
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
if((s[u]^s[v])==w)puts("Yes");
else puts("No");
}
return 0;
}