#include <bits/stdc++.h>
using namespace std;
long long f[62][2];
long long s, a;
long long dfs(int d, int up) {
  if (d == 60 && up == 0) return 1;
  if (f[d][up] != -1) return f[d][up];
  long long &ans = f[d][up];
  ans = 0;
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      if (((i + j + up) & 1) != ((s >> d) & 1)) continue;
      if ((i ^ j) != (a >> d & 1)) continue;
      ans += dfs(d + 1, (i + j + up) / 2);
    }
  }
  return ans;
}
int main() {
  while (scanf("%I64d%I64d", &s, &a) != EOF) {
    memset(f, -1, sizeof(f));
    long long ans = dfs(0, 0);
    if (s == a) ans -= 2;
    printf("%I64d\n", ans);
  }
  return 0;
}
