#include<bits/stdc++.h>
using namespace std;
#define MAXN 500
struct intt{
int len,a[MAXN];
intt(int n=0){
memset(a,0,sizeof(a));
int i;
for(i=1;n;i++){
a[i]=n%10;
n/=10;
}
len=i-1;
}
int &operator[](int x){
return a[x];
}
void jinwei(int l){
len=l;
for(int i=1;i<=len;i++){
a[i+1]+=a[i]/10;
a[i]%=10;
if(a[i]<0){
a[i+1]-=10;
a[i]+=10;
}
}
while(!a[len]){
len--;
}
}
void weihu(){
jinwei(MAXN-1);
}
void out(){
for(int i=max(len,1);i>=1;i--){
printf("%d",a[i]);
}
}
};
int intadd(int a,int b){
return a+b;
}
int intcut(int a,int b){
return a-b;
}
bool operator>(intt a,intt b){
a.weihu();
b.weihu();
if(a.len>b.len){
return 1;
}else if(a.len<b.len){
return 0;
}else{
for(int i=a.len;i>0;i--){
if(a[i]>b[i]){
return 1;
}else if(b[i]>a[i]){
return 0;
}
}
}
return 1;
}
bool operator==(intt a,intt b){
a.weihu();
b.weihu();
if(a.len!=b.len){
return 0;
}else{
for(int i=a.len;i>0;i--){
if(a[i]!=b[i]){
return 0;
}
}
}
return 1;
}
bool operator<(intt a,intt b){
return !(a==b||a>b);
}
intt operator+(intt a,intt b){
intt c;
int len=max(a.len,b.len);
for(int i=1;i<=len;i++){
c[i]+=a[i]+b[i];
}
c.jinwei(len+1);
return c;
}
intt operator-(intt a,intt b){
intt c;
int len=max(a.len,b.len);
for(int i=1;i<=len;i++){
c[i]+=a[i]-b[i];
}
c.jinwei(len+1);
return c;
}
intt operator*(intt a,intt b){
intt c;
int len=a.len+b.len;
for(int i=1;i<=a.len;i++){
for(int j=1;j<=b.len;j++){
c[intadd(i,intcut(j,1))]=a[i]*b[j];
}
}
c.jinwei(len+1);
return c;
}
intt a=intt(0),b=intt(0),c=intt(0);
int x,y;
int main(){
scanf("%d%d",&x,&y);
a=intt(x)+intt(1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
b=intt(y)+intt(1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
c=a+b-intt(2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
c.out();
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define MAXN 500
struct intt{
int len,a[MAXN];
intt(int n=0){
memset(a,0,sizeof(a));
int i;
for(i=1;n;i++){
a[i]=n%10;
n/=10;
}
len=i-1;
}
int &operator[](int x){
return a[x];
}
void jinwei(int l){
len=l;
for(int i=1;i<=len;i++){
a[i+1]+=a[i]/10;
a[i]%=10;
}
while(!a[len]){
len--;
}
}
void weihu(){
jinwei(MAXN-1);
}
void out(){
for(int i=max(len,1);i>=1;i--){
printf("%d",a[i]);
}
}
};
int intadd(int a,int b){
return a+b;
}
int intcut(int a,int b){
return a-b;
}
bool operator>(intt a,intt b){
a.weihu();
b.weihu();
if(a.len>b.len){
return 1;
}else if(a.len<b.len){
return 0;
}else{
for(int i=a.len;i>0;i--){
if(a[i]>b[i]){
return 1;
}else if(b[i]>a[i]){
return 0;
}
}
}
return 1;
}
bool operator==(intt a,intt b){
a.weihu();
b.weihu();
if(a.len!=b.len){
return 0;
}else{
for(int i=a.len;i>0;i--){
if(a[i]!=b[i]){
return 0;
}
}
}
return 1;
}
bool operator<(intt a,intt b){
return !(a==b||a>b);
}
intt operator+(intt a,intt b){
intt c;
int len=max(a.len,b.len);
for(int i=1;i<=len;i++){
c[i]+=a[i]+b[i];
}
return c;
}
intt operator-(intt a,intt b){
intt c;
int len=max(a.len,b.len);
for(int i=1;i<=len;i++){
c[i]+=a[i]-b[i];
}
c.jinwei(len+1);
return c;
}
intt operator*(intt a,intt b){
intt c;
int len=a.len+b.len;
for(int i=1;i<=a.len;i++){
for(int j=1;j<=b.len;j++){
c[intadd(i,intcut(j,1))]=a[i]*b[j];
}
}
c.jinwei(len+1);
return c;
}
bool abss(int a,int b)
intt a=intt(0),b=intt(0),c=intt(0);
int x,y;
int main(){
scanf("%d%d",&x,&y);
a=intt(x)+intt(1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
b=intt(y)+intt(1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
c=a+b-intt(2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
c.out();
return 0;
}