#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
int t,n,m,l,r,d,k;
vector<int> v[100005];
int main()
{
cin>>t;
while(t--){
scanf("%d%d",&n,&m);
for(int i=1;i<=100005;i++) v[i].clear();
for(int i=1;i<=n;i++){
scanf("%d",&k);
for(int j=2;j*j<=k;j++){
while(k%j==0){
v[j].push_back(i);
k/=j;
}
}
if(k>1) v[k].push_back(i);
}
while(m--){
scanf("%d%d%d",&l,&r,&d);
int flag=0,cou,ans;
for(int i=2;i*i<=d;i++){
if(d%i==0){
cou=0;
while(d%i==0){
cou++;
d/=i;
}
ans=upper_bound(v[i].begin(),v[i].end(),r)-lower_bound(v[i].begin(),v[i].end(),l);
/*lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。
upper_bound(起始地址,结束地址,要查找的数值) 返回的是数值 最后一个 出现的位置。
binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个bool值。
*/
if(cou>ans) {
flag=1;
break;
}
}
}
if(d>1){
int an=upper_bound(v[d].begin(),v[d].end(),r)-lower_bound(v[d].begin(),v[d].end(),l);
if(an<1) flag=1;
}
if(flag) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
}
return 0;
}