//#define _GLIBCXX_DEBUG #include #define rep(i, n) for(int i=0; i; using vs = vector; using vi = vector; using vvi = vector; template using PQ = priority_queue; template using PQG = priority_queue, greater >; const int INF = 0xccccccc; const ll LINF = 0xcccccccccccccccLL; template inline bool chmax(T1 &a, T2 b) {return a < b && (a = b, true);} template inline bool chmin(T1 &a, T2 b) {return a > b && (a = b, true);} template istream &operator>>(istream &is, pair &p) { return is >> p.first >> p.second;} template ostream &operator<<(ostream &os, const pair &p) { return os << p.first << ' ' << p.second;} //head int x[1001]; int u = 1; int main() { int n, z; scanf("%d%d", &n, &z); if(n >= 3) { printf("No\n"); return 0; } if(n == 1) { if(z > 1) printf("Yes\n"); else printf("No\n"); return 0; } for(int i = 1; i < z; i++) { u++; x[i] = i*i; } z *= z; int j = u-1; for(int i = 1; x[i] < (z>>1); i++) { if(x[i] + x[j] > z) j--; if(x[j]+x[i] == z) { printf("Yes\n"); return 0; } } printf("No\n"); }