#include <bits/stdc++.h>
long long a, b;
bool aa[66] = {};
bool bb[66] = {};
int top1 = -1, top2 = -1;
long long sum2[66][2] = {};
int main() {
  scanf("%I64d%I64d", &a, &b);
  if (a < b) {
    printf("0\n");
    return 0;
  }
  bool flag = 0;
  if (a == b) flag = 1;
  top1 = -1, top2 = -1;
  for (int i = 0; i < 66; i++) sum2[i][0] = sum2[i][1] = 0;
  while (a > 0) aa[++top1] = a & 1, a >>= 1;
  while (b > 0) bb[++top2] = b & 1, b >>= 1;
  if (aa[0] != bb[0]) {
    printf("0\n");
    return 0;
  }
  sum2[0][0] = 1;
  for (int i = 0; i <= top1; i++) {
    if (aa[i] == 1 && bb[i] == 0)
      sum2[i + 1][0] = sum2[i][1], sum2[i + 1][1] = sum2[i][1];
    else if (aa[i] == 0 && bb[i] == 1)
      sum2[i + 1][1] = sum2[i][1] * 2;
    else if (aa[i] == 1 && bb[i] == 1)
      sum2[i + 1][0] = sum2[i][0] * 2;
    else if (aa[i] == 0 && bb[i] == 0)
      sum2[i + 1][1] = sum2[i][0], sum2[i + 1][0] = sum2[i][0];
  }
  if (flag) sum2[top1 + 1][0] -= 2;
  printf("%I64d\n", sum2[top1 + 1][0]);
}
