#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; }