#include <bits/stdc++.h>
#define ll long long int
#define pb push_back
#define mp make_pair
#define mod 1000000007
#define vl vector <ll>
#define all(c) (c).begin(),(c).end()
using namespace std;
long long readInt(long long l,long long r,char endd){
    long long x=0;
    int cnt=0;
    int fi=-1;
    bool is_neg=false;
    while(true){
        char g=getchar();
        if(g=='-'){
            assert(fi==-1);
            is_neg=true;
            continue;
        }
        if('0'<=g && g<='9'){
            x*=10;
            x+=g-'0';
            if(cnt==0){
                fi=g-'0';
            }
            cnt++;
            assert(fi!=0 || cnt==1);
            assert(fi!=0 || is_neg==false);

            assert(!(cnt>19 || ( cnt==19 && fi>1) ));
        } else if(g==endd){
            if(is_neg){
                x= -x;
            }

            if(!(l <= x && x <= r))
            {
                cerr << l << ' ' << r << ' ' << x << '\n';
                assert(1 == 0);
            }

            return x;
        } else {
            assert(false);
        }
    }
}
string readString(int l,int r,char endd){
    string ret="";
    int cnt=0;
    while(true){
        char g=getchar();
        assert(g!=-1);
        if(g==endd){
            break;
        }
        cnt++;
        ret+=g;
    }
    assert(l<=cnt && cnt<=r);
    return ret;
}
long long readIntSp(long long l,long long r){
    return readInt(l,r,' ');
}
long long readIntLn(long long l,long long r){
    return readInt(l,r,'\n');
}
string readStringLn(int l,int r){
    return readString(l,r,'\n');
}
string readStringSp(int l,int r){
    return readString(l,r,' ');
}

const int MAXT = 100000;
const int MAXN = 1000000;

int p[MAXN + 7];
vector<int> pr;

void seive() {
    for(int i = 2; i <= MAXN; i++) {
        if(p[i]) continue;
        pr.push_back(i);
        for(int j = i*2; j <= MAXN; j+=i)
            p[j] = 1;
    }
}

void solve()
{
    int a = readInt(1,MAXN,' ');
    int b = readInt(1,MAXN,'\n');
    vector<pair<int, int>> aa,bb;
    int cur = 0;
    int prime = pr[cur];
    while(prime*prime <= a) {
        int cnt = 0;
        while(a%prime == 0) a/=prime, cnt++;
        if(cnt) aa.push_back({prime, cnt});
        cur++;
        prime = pr[cur];
    }
    if(a > 1) aa.push_back({a, 1});
    cur = 0;
    prime = pr[cur];
    while(prime*prime <= b) {
        int cnt = 0;
        while(b%prime == 0) b/=prime, cnt++;
        if(cnt) bb.push_back({prime, cnt});
        cur++;
        prime = pr[cur];
    }
    if(b > 1) bb.push_back({b, 1});
    int bad = 0;
    if(aa.size() != bb.size()) bad = 1;
    for(int i = 0; i < aa.size(); i++) {
        if(aa[i].first != bb[i].first) {
            bad = 1;
            break;
        }
        if(aa[0].second*bb[i].second != aa[i].second*bb[0].second) {
            bad = 1;
            break;
        }
    }
    if(bad) cout << "NO\n";
    else cout << "YES\n";
}
int main()
{
    //ios_base::sync_with_stdio(false);
    //cin.tie(NULL),cout.tie(NULL);
    seive();
    int T=readInt(1,MAXT,'\n');
    while(T--)
        solve();
    assert(getchar()==-1);
    cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n";
}