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