#include <cstdio>
#define ll long long
#define mem(x, a) memset(x, a, sizeof x)
#define mpy(x, y) memcpy(x, y, sizeof y)
#define fo(x, a, b) for (int x = (a); x <= (b); x++)
#define fd(x, a, b) for (int x = (a); x >= (b); x--)
#define go(x) for (int p = tail[x], v; p; p = e[p].fr)
using namespace std;
ll n, m;

int main()
{
	scanf("%lld%lld", &n, &m);
	for (ll i = 1; i * i <= m; i++)
		if (m % i == 0) {
			ll j = m / i;
			if (i + j == n)
				return 0 & printf("Yes\n");
		}
	printf("No\n");
	return 0;
}

#include<bits/stdc++.h>
using namespace std;

#define int long long int
#define ff first
#define ss second
#define pb push_back
#define print(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "

std::random_device dev;
std::mt19937 rng(dev());
std::uniform_int_distribution<std::mt19937::result_type> dist(1,10000000); // distribution in range [1, 6]


const double PI =  3.141592653589793238;
int bexp(int a, int b, int mod)
{
    int res = 1;

    while (b)
    {
        if (b & 1) res = (res * a) % mod;

        a = (a * a) % mod; 
        b >>= 1;
    }
    return res;
}

int gcd(int a, int b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b);
}

const int N = 100010;
const int mod = 1e9 + 7;

struct comp {
    bool operator() (const pair<int, int> a, const pair<int, int> b) const
    {
        return a.ss > b.ss;
    }
};

int32_t main() 
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.precision(10);
    
    int tt = 1;
    // cin >> tt;

    while (tt--) {
        int s, p;
        cin >> s >> p;

        int f = 0;
        for (int i = 1; i <= 1e6; ++i) {
            if (i * (s - i) == p) {
                f = 1;
            }
        }

        if (f) cout << "Yes\n";
        else cout << "No\n";

    }
    return 0;
}