#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define ordered_set tree<int , null_type,less<int> , rb_tree_tag,tree_order_statistics_node_update>
#define int64 long long int
#define endl '\n'
#define f first
#define s second
using namespace std;
using namespace __gnu_pbds;
const double PI = acos(-1);
const int mod = 1e9 + 7;
const int inf = INT_MAX;
const int _inf = INT_MIN;
int pref[10][100005];
int a[100005];
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL); cout.tie(NULL);
int tc = 1; cin >> tc;
while(tc--){
int n, x; cin >>n >>x;
vector <pair <int, int>> facts;
for (int i = 2; i * i <= x; i++)
{
int cnt = 0;
while (x % i == 0)
{
x /= i;
cnt++;
}
if (cnt) facts.push_back({i, cnt});
}
if (x > 1)
{
facts.push_back({x, 1});
}
for (int i = 1; i <= n; i++)
{
cin >> a[i];
for (int j = 0; j < facts.size(); j++)
{
int pr = facts[j].first;
int koybar = 0;
while (a[i] % pr == 0)
{
a[i] /= pr;
koybar++;
}
pref[j][i] = koybar;
pref[j][i] += pref[j][i - 1];
}
}
int q; cin >>q;
while (q--)
{
int l, r; cin >>l >>r;
bool hobe = 1;
for (int j = 0; j < facts.size(); j++)
{
int inside = pref[j][r] - pref[j][l - 1];
if (inside < facts[j].second) hobe = 0;
}
if (hobe) cout <<"Yes\n";
else cout <<"No\n";
}
}
return 0;
}