#include <stdio.h>
#include <limits.h>
int add0(int* carry, int a, int b) {
*carry = a + b >= 2;
return a != b;
}
int add1(int* carry_out, int a, int b, int c) {
*carry_out = (a && b) || (b && c) || (c && a);
a ^= b ^ c;
return +a;
}
int add2(int* carry_out, int a, int b, int c) {
int ab, bc, ca;
ab = a; ab -= -b;
bc = 0;
if (b) bc--;
if (c) --bc;
ca = c; ca += a;
*carry_out = !!((ab == 2) + (bc <= -2) + (1 < ca));
return (a + b + c) % 2;
}
struct add3_ret {
int result;
int carry;
};
struct add3_ret add3(int a, int b, int c) {
int ab, bc, ca;
ab = a; ab *= b;
bc = ~(~b | ~c);
ca = c; ca <<= a;
return (struct add3_ret){ (a != b) - c ? 1 : 0, ab || bc || (ca & 2) };
}
int main(void) {
int a, b;
int a_bits[7], b_bits[7], ans_bits[8];
int i, carry;
struct add3_ret ret;
int ans = 0;
if (scanf("%d%d", &a, &b) != 2) return 1;
a_bits[0] = ((unsigned int)a << (sizeof(unsigned int) * CHAR_BIT - 1)) > 0;
a_bits[1] = a / 2; a_bits[1] %= 2;
a_bits[2] = a >> 2; a_bits[2] &= 1;
a_bits[3] = a % 16; a_bits[3] /= 8;
a_bits[4] = a % 32; a_bits[4] >>= 4;
a_bits[5] = (a >> 5) & 1;
a_bits[6] = a >> 6;
for (i = 0; i < 7; i++) {
b_bits[i] = (b >> i) & 1;
}
ans_bits[0] = add0(&carry, a_bits[0], b_bits[0]);
ans_bits[1] = add1(&carry, a_bits[1], b_bits[1], carry);
ans_bits[2] = add2(&carry, a_bits[2], b_bits[2], carry);
ret = add3(a_bits[3], b_bits[3], carry);
ans_bits[3] = (&ret)->result;
ret = add3(a_bits[4], b_bits[4], ret.carry);
ans_bits[4] = ret.result;
ans_bits[5] = add2(&carry, a_bits[5], b_bits[5], ret.carry);
ans_bits[6] = add1(&ans_bits[7], a_bits[6], b_bits[6], carry);
for (i = 0, ans = 0; i < 8; ++i) {
ans |= ans_bits[i] << i;
}
printf("%d\n", ans);
return 0;
}