Problem:
Score : 900 points

Problem Statement

Nukes has an integer that can be represented as the bitwise OR of one or more integers between A and B (inclusive).
How many possible candidates of the value of Nukes's integer there are?

Constraints

1 ≤ A ≤ B < 2^{60}

A and B are integers.

Input

The input is given from Standard Input in the following format:

A
B

Output

Print the number of possible candidates of the value of Nukes's integer.

Sample Input 1

7
9

Sample Output 1

4

In this case, A=7 and B=9. There are four integers that can be represented as the bitwise OR of a non-empty subset of {7, 8, 9}: 7, 8, 9 and 15.

Sample Input 2

65
98

Sample Output 2

63

Sample Input 3

271828182845904523
314159265358979323

Sample Output 3

68833183630578410

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
const int INF=1e9,MOD=1e9+7;
const long long LINF=1e18;
using namespace std;
#define int long long
//template
/*
数え上げpdfを読んで
A<2^t<=Bと出来ることはわかった
そうするとA~(2^t)-1までの数は全部作れる
2^t以上の数を作る時、A~(2^t)-1の力を借りる必要があるかどうかで場合分け
・借りる必要がある場合
2^t+A~(2^t)+(2^t)-1まではそれぞれ作れる（少なくとも2^tはいるため）
逆にこいつらの力を借りる以上こいつらより小さいものは作れない
・借りる必要がない場合
2^t~Bを全部orしてできる奴が最大でそこまで全部作れる
全部orしていると間に合わないけど、つまりBに立ってる2^t以外での最上位bitを見ればいいはず
*/
int pw(int n,int k){
  int res=1;
  while(k){
    if(k&1)res*=n;//res%=MOD;
    n*=n;//n%=MOD;
    k>>=1;
  }
  return res;
}
void smart(int &a,int &b){
  int k=pw(2,60);
  while(true){
    if((a&k)^(b&k))return;
    if(a-k>0)a-=k;
    if(b-k>0)b-=k;
    k/=2;
  }
}
int bmax(int b){
  int k=pw(2,60);
  while(true){
    if(b&k)return k;
    k/=2;
  }
  return 0;
}
int bmax2(int b){
  b^=bmax(b);
  return bmax(b);
}
//main
signed main(){
  int A,B;cin>>A>>B;
  if(A==B){cout<<1<<endl;return 0;}
  smart(A,B);
  int ans=0;
  ans+=(bmax(B)-A)*2;
  ans+=bmax2(B)*2;
  ans-=max(0LL,bmax2(B)*2-A);
  cout<<ans<<endl;
}