#include <bits/stdc++.h>
using namespace std;
#pragma warning(disable : 4996)
const long long N = 2e5 + 5;
const long long mod = 1e9 + 7;
const long long inf = 1e18;
long long po(long long n1, long long n2, long long p = mod) {
  long long inp = 1;
  n1 %= p;
  while (n2 > 0) {
    if (n2 & 1) inp = (inp * n1) % p;
    n2 = n2 >> 1;
    n1 = (n1 * n1) % p;
  }
  return inp;
}
long long inv(long long n1, long long p = mod) { return po(n1, p - 2); }
void solve() {
  long long SUM, XOR;
  cin >> SUM >> XOR;
  long long AND = (SUM - XOR) / 2;
  long long osum = SUM;
  long long oxor = XOR;
  long long pos = true;
  long long num_pairs = 1;
  if ((SUM - XOR) % 2 != 0) {
    cout << 0;
    return;
  }
  while (AND != 0 || XOR != 0) {
    long long xor_bit = XOR & 1;
    long long and_bit = AND & 1;
    if (xor_bit == 1 && and_bit == 0) {
      num_pairs *= 2;
    } else if (xor_bit == 1 && and_bit == 1) {
      num_pairs *= 0;
      pos = false;
      break;
    } else if (xor_bit == 0 && and_bit == 0) {
      num_pairs *= 1;
    } else if (xor_bit == 0 && and_bit == 1) {
      num_pairs *= 1;
    }
    AND = AND >> 1;
    XOR = XOR >> 1;
  }
  if (pos) {
    if (osum == oxor) {
      cout << num_pairs - 2;
    } else {
      cout << num_pairs;
    }
  } else {
    cout << 0;
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(0);
  long long t = 0;
  long long test_cases = 1;
  while (t++ < test_cases) {
    solve();
    cout << "\n";
  }
  return 0;
}
