#include <bits/stdc++.h>
using namespace std;
long long one = 1;
long long s, x;
long long dp[50][2];
long long rec(long long pos, long long c) {
  if (pos == 45 && !c) return 1;
  if (pos == 45) return 0;
  if (dp[pos][c] != -1) return dp[pos][c];
  long long i, j;
  i = s & (one << pos);
  j = x & (one << pos);
  if (i && j) {
    if (c) return dp[pos][c] = 0;
    return dp[pos][c] = 2 * rec(pos + 1, 0);
  } else if (i) {
    if (!c) return dp[pos][c] = 0;
    return dp[pos][c] = rec(pos + 1, 0) + rec(pos + 1, 1);
  } else if (j) {
    if (!c) return dp[pos][c] = 0;
    return dp[pos][c] = 2 * rec(pos + 1, 1);
  } else {
    if (c) return dp[pos][c] = 0;
    return dp[pos][c] = rec(pos + 1, 0) + rec(pos + 1, 1);
  }
}
int main(void) {
  memset(dp, -1, sizeof(dp));
  long long i, j, ans;
  cin >> s >> x;
  ans = rec(0, 0);
  if (s == x) ans -= 2;
  cout << ans << endl;
  return 0;
}
