#include using namespace std; #define si(i) scanf("%d",&i) #define si2(i,j) scanf("%d %d",&i,&j) #define si3(i,j,k) scanf("%d %d %d",&i,&j,&k) #define slli(i) scanf("%lld",&i) #define slli2(i,j) scanf("%lld %lld",&i,&j) #define slli3(i,j,k) scanf("%lld %lld %lld",&i,&j,&k) #define pi(i) printf("%d\n",i) #define plli(i) printf("%lld\n",i) #define SYNC ios_base::sync_with_stdio(0) #define mp make_pair #define FF first #define SS second #define pb push_back #define fill(a,v) memset(a,v,sizeof a) #define ceil(a,b) (((a)%(b)==0)?((a)/(b)):((a)/(b)+1)) #define rem(a,b) ((a<0)?((((a)%(b))+(b))%(b)):((a)%(b))) #define MOD 1000000007LL #define INF INT_MAX #define N 100007 typedef long long int ll; typedef pair PII; typedef pair PLL; typedef vector VS; typedef vector VI; typedef vector VL; typedef vector VOII; typedef vector VOLL; typedef vector VOVI; int dX[] = {-1,0,1,0,-1,1,1,-1}; int dY[] = {0,1,0,-1,1,1,-1,-1}; map data; ll recurse(ll l,ll b) { if(data.find(mp(l,b)) != data.end()) return data[mp(l,b)]; ll ret = 0; if(l == 1 && b == 1) return 0; else { if(l != 1) { ret = 1 + (recurse(l/2,b) + recurse(l - l/2, b)); } else ret = 1 + (recurse(l,b/2) + recurse(l,b - b/2)); } data[mp(l,b)] = ret; return ret; } int main() { ll n,m; cin >> n >> m; cout << recurse(n,m) << endl; return 0; }