#include using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep1(i, n) for (int i = 1; i < (int)(n); i++) #define length size() #define int long long #define ll long long #include long long modpow(long long a, long long n, long long mod) { long long res = 1; if(n==0) return 0; while (n > 0) { if (n & 1) res = res * a % mod; a = a * a % mod; n >>= 1; } return res; } const int MOD = 1000000007; const int mod = 998244353; const int MAX = 510000; const int inf = 400000000000000; template string join(vector &vec ,const string &sp){ int si = vec.length; if(si==0){ return ""; }else{ stringstream ss; rep(i,si-1){ ss << vec[i] << sp; } ss << vec[si - 1]; return ss.str(); } } vector> ruiseki2d(vector> vec){ rep(i,vec.size()-1){ rep(j,vec[0].size()-1){ vec[i+1][j+1] = vec[i][j+1]+vec[i+1][j]-vec[i][j]+vec[i+1][j+1]; } } return vec; } class CompareDist { public: bool operator()(pair p,pairq){ return p.second > q.second; } }; int ctoi(const char c){ switch(c){ case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; default : return -1; } } vector dijkstra(vector>> vec,int s){ priority_queue,vector>,CompareDist> que; pair f = make_pair(s,0);//point,cost; que.push(f); bool y = false; vector cost(vec.size(),inf); while(!que.empty()){ pair tmp = que.top(); que.pop(); int p = tmp.first; int c = tmp.second; if(cost[p]>c){ cost[p] = c; rep(i,vec[p].size()){ if(cost[vec[p][i].first]<=inf){ tmp = make_pair(vec[p][i].first,vec[p][i].second+c); que.push(tmp); } } } if(!y) cost[p] = inf; y = true; } return cost; } signed main(void){ int n,m; cin >> n >> m; cout << (n&m)+(n|m) << endl; }