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