#include<bits/stdc++.h>

using namespace std;

#define rep(i, a, n) for(int i = a; i < n; i++)
#define all(A) A.begin(),A.end()
#define an(A, n) A,A+n
#define sz(a) int(a.size())
#define pu push
#define pb push_back
#define pob pop_back
#define mp(a, b) make_pair(a, b)
#define fi first
#define se second
#define is insert

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<char> vc;
typedef vector<string> vs;
typedef vector<ll> vl;
typedef vector<ld> vld;
typedef pair<int, int> pii;
typedef vector<vi> vvi;
typedef set<int> si;

const int dx4[] = {-1, 0, 1, 0};
const int dy4[] = {0, 1, 0, -1};
const int dx8[] = {-1, 0, 1, 0 , -1 , -1 , 1 , 1};  
const int dy8[] = {0, 1, 0, -1 , -1 , 1 , -1 , 1};
const int MOD = 1000000007;  
const int INF = 0x3f3f3f3f;  
const ll INFF = 1LL << 60;  
const ld EPS = 1e-9;  
const ld OO = 1e15;  
const ld PI = acos(-1.0); //M_PI;

const ll N = 1000010;

int main() {

    //TODO:
    ll s;
    ll p;
    cin >> s >> p;
    int flag = 0;
    rep(i, 1, N) {
        if(i * (s - i) == p) {
            flag = 1;
            break;
        }
    }
    if(flag) {
        cout << "Yes";
    }
    else {
        cout << "No";
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;

#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);
#define endl '\n'

typedef long long ll;
typedef pair<int,int> pii;
/*
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ost; // set
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_multiset; // multiset
*/

// direction array
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};

// Bitmask

/*
bool check(int mask,int pos){return mask&(1<<pos);}
int SET(int mask,int pos){return mask|(1<<pos);}
int FLIP(int mask,int pos){return mask^(1<<pos);}
int reset(int mask,int pos){return mask&~(1 << pos);}
*/


int main()
{
    ll s,p;

    cin>>s>>p;

    for(ll i=1;i*i<=p;i++){
        if(p%i==0 && i+(p/i)==s){
            cout<<"Yes\n";
            return 0;
        }
    }
    cout<<"No\n";
}

