rt,WA 了之后调不动一点,呜呜
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<int,ll> pil;
#define fi first
#define se second
#define endl '\n'
#define mp make_pair
#define pb push_back
#define all(x) x.begin(),x.end()
#define Cl(x) memset(x,0,sizeof(x))
const bool DC=0;
const ll mod=0;
const int N=0;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll qpow(ll a,ll b,ll p=mod){ll ans=1;for(;b;b>>=1,a=a*a%p)if(b&1)ans=ans*a%p;return ans;}
void NO(){cout<<"NO\n";}
void YES(){cout<<"YES\n";}
mt19937 rnd((unsigned long long)new char);
int rnad(){return abs((int)rnd());}
int rd(int l,int r){return rnad()%(r-l+1)+l;}
int n,m,w[100005],f[100005],dep[100005],sz[100005],hv[100005],top[100005],dfn[100005],dcnt;
vector<int>v[100005],c[100005];
void dfs1(int now,int fa){
f[now]=fa,dep[now]=dep[fa]+1,sz[now]=1;
for(auto i:v[now])if(i^fa)dfs1(i,now),sz[now]+=sz[i],sz[i]>sz[hv[now]]&&(hv[now]=i);
}
void dfs2(int now,int t){
top[now]=t,dfn[now]=++dcnt;
if(hv[now])dfs2(hv[now],t);
for(auto i:v[now])if(!dfn[i])dfs2(i,i);
}
void __INIT__(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);}
void __SOLVE__(int _case){
while(cin>>n>>m){
for(int i=1;i<=n;i++)v[i].clear(),c[i].clear();
c[0].clear();
dep[1]=0,dcnt=0,Cl(hv);
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=1,x,y;i<n;i++)cin>>x>>y,v[x].push_back(y),v[y].push_back(x);
dfs1(1,1),dfs2(1,1);
for(int i=1;i<=n;i++)c[w[i]].push_back(dfn[i]);
while(m--){
int x,y,z;
cin>>x>>y>>z;
bool ans=0;
#define fd(l,r) lower_bound(all(c[z]),dfn[l])!=upper_bound(all(c[z]),dfn[r])
while(top[x]^top[y])dep[top[x]]<dep[top[y]]&&(swap(x,y),1),ans|=fd(top[x],x),x=f[top[x]];
dep[x]>dep[y]&&(swap(x,y),1),ans|=fd(x,y);
cout<<(ans?"Find":"NotFind")<<"\n";
}cout<<"\n";
}
}
int main(){/*freopen(".in","r",stdin);freopen(".out","w",stdout);*/__INIT__();int T;DC?cin>>T,1:T=1;for(int _CASE=1;_CASE<=T;_CASE++)__SOLVE__(_CASE);return 0;}