#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:536870912")
const int MOD = 1296000;
const int INF = 1000000001;
const int MAXN = 17;
const long double EPS = 1e-6;
const int HASH_POW = 29;
const long double PI = acos(-1.0);
using namespace std;
void my_return(int code) { exit(code); }
int count(int s, int x) {
  int ans = 0;
  for (int i = 0; i <= s; ++i) {
    if ((i ^ (s - i)) == x) ++ans;
  }
  return ans;
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  mt19937 mt_rand(time(0));
  long long s, x;
  scanf("%I64d %I64d", &s, &x);
  if (s <= (1 << 22)) {
    int ans = count(s, x);
    if (s == x) ans -= 2;
    printf("%d\n", ans);
  } else {
    int rr = (x & ((1 << 20) - 1)), ll = (x >> 20);
    int cnt0 = 0, cnt1 = 0;
    for (int i = 0; i < (1 << 20); ++i) {
      if ((i + (i ^ rr)) % (1 << 20) == s % (1 << 20)) {
        if ((i + (i ^ rr)) < (1 << 20))
          ++cnt0;
        else
          ++cnt1;
      }
    }
    long long ans = 0;
    ans += count(s / (1 << 20), ll) * 1ll * cnt0;
    ans += count(s / (1 << 20) - 1, ll) * 1ll * cnt1;
    if (s == x) ans -= 2;
    printf("%I64d\n", ans);
  }
  my_return(0);
}
