//傻瓜做法
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void isok(string s, string t) {
string rem = s + s;
if (rem.find(t) != string::npos) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
int main() {
int a, b;
while (cin >> a >> b) {
string sa, sb;
while (a > 0) {
sa += a % 2 + '0';
a /= 2;
}
while (b > 0) {
sb += b % 2 + '0';
b /= 2;
}
int la = sa.size(), lb = sb.size();
for (int i = 0; i < 16 - la; i++) {
sa += '0';
}
for (int i = 0; i < 16 - lb; i++) {
sb += '0';
}
reverse(sa.begin(), sa.end());
reverse(sb.begin(), sb.end());
isok(sa, sb);
}
return 0;
}