#include <bits/stdc++.h>
#define watch(x) std::cout << (#x) << " is " << (x) << std::endl
using LL = long long;
using pii = std::pair<int, int>;
using pll = std::pair<LL, LL>;

int main() {
	//freopen("in","r",stdin);
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	LL s, p;
	std::cin >> s >> p;
	__int128 S = s, P = p;
	if (S * S < 4 * P) {
		std::cout << "No\n";
		return 0;
	}
	__int128 b = std::sqrt(1.0 * S * S - 4 * P + 0.5);
	if (b * b == S * S - 4 * P && ((b + s) % 2 == 0)) {
		std::cout << "Yes\n";
	} else std::cout << "No\n";
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define FOR(i, a, b) for(ll i = (a); i < (b); ++i)
#define REP(i, n) for(ll i = 0; i < (n); ++i)
#define ARRAY_LENGTH(array) sizeof(array)/sizeof(*array)
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
const int INF = 1000100100;
const int MOD = 1000000007;

vector<long long> divisor(long long n) {
    vector<long long> ret;
    for (long long i = 1; i * i <= n; i++) {
        if (n % i == 0) {
            ret.push_back(i);
        }
    }
    sort(ret.begin(), ret.end());
    return ret;
}

ll S, P;

int main() {
    cin >> S >> P;

    vector<ll> div = divisor(P);

    for(ll i = 0; i < div.size(); ++i) {
        if(div.at(i) + (P/div.at(i)) == S) {
            cout << "Yes" << endl;
            return 0;
        }
    }
    cout << "No" << endl;
    return 0;
}