// Pratiyush Mishra
#include <bits/stdc++.h>
#define ll long long int
using namespace std;
ll gcd(ll a, ll b)
{
if (b == 0)
return a;
else
return gcd(b, a % b);
}
void prime_factorization(ll n, vector<pair<ll, ll>> &v)
{
for (int i = 2; (i * i) <= n; i++)
{
if (n % i != 0)
continue;
ll cnt = 0;
while (n % i == 0)
{
n /= i;
++cnt;
}
v.push_back({i, cnt});
}
if (n != 1)
v.push_back({n, 1});
sort(v.begin(), v.end());
}
void mainSolve()
{
ll a, b;
cin >> a >> b;
vector<pair<ll, ll>> prime_fac_a, prime_fac_b;
prime_factorization(a, prime_fac_a);
prime_factorization(b, prime_fac_b);
if (prime_fac_a.size() != prime_fac_b.size() || prime_fac_a[0].first != prime_fac_b[0].first)
{
cout << "NO \n";
return;
}
ll g = gcd(prime_fac_a[0].second, prime_fac_b[0].second);
ll c1 = prime_fac_a[0].second / g;
ll c2 = prime_fac_b[0].second / g;
int n = prime_fac_b.size();
for (int i = 1; i < n; i++)
{
if (prime_fac_a[i].first != prime_fac_b[i].first)
{
cout << "NO \n";
return;
}
ll curr_g = gcd(prime_fac_a[i].second, prime_fac_b[i].second);
ll curr_c1 = prime_fac_a[i].second / curr_g;
ll curr_c2 = prime_fac_b[i].second / curr_g;
if (curr_c1 != c1 || curr_c2 != c2)
{
cout << "NO \n";
return;
}
}
cout << "YES \n";
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t;
cin >> t;
while (t--)
{
mainSolve();
}
return 0;
}