#include //#include using namespace std; //using namespace atcoder; using ll = long long; using vc = vector; using vvc = vector>; using u64 = uint64_t; using pqi = priority_queue; using dqi = deque; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define llrep(i, n) for (LL i = 0; i < (int)(n); i++) #define nrep(i, s, n) for (int i = s; i < n; i++) #define drep(i, n) for (int i = (n) - 1; i >= 0; i--;) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define pb push_back #define mp make_pair #define int long long const int INF = 1e17; const double pi = 3.14159265358979; const int mod = 998244353; const int MOD = 1000000007; //sni:tmp,pi,vvc,no,NO,yes,YES,vi,keta,pq,gpq signed main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); int n,m; cin>>n>>m; int ans = 0; int it = 1; int kn = n; int km = m; int i = 0; while(kn>0||km>0){ int xn = kn%2; int xm = km%2; kn /= 2; km /= 2; if(i%2==0){ if(xm==1){ if(xn==0){ cout << -1 << endl; return 0; } else ans += it; } } else { if(xm==1){ if(xn==0)ans += it; } if(xm==0&&xn==1){ cout << -1 << endl; return 0; } } i++; it *= 2; } cout << ans << endl; }