#include<bits/stdc++.h>
using namespace std;
string ss,ff,gg;
int kj[1000000];
int p[10000000];
int k[1000000];
int pio[10000000];
int jj[1000000];
int piu[10000000];
int sdg[1000000];
int qqq[10000000];
int pl(int a,int b){
if(b==0)
return a;
else{
int x,c;
x=a^b;
c=(a&b)<<1;
return pl(x,c);
}
}
void ip(int a){
p[1]=1;
for(int i=2;i<=sqrt(a);i++){
if(p[i]==0){
for(int j=i*i;j<=a;j+=i){
p[j]=1;
}}
}
}
void add(string a,string b){
int n[10000000]={0};
int m[10000000]={0};
int c[10000000]={0};
long long answer=0;
long long l1=a.size();
long long l2=b.size();
}
int RAND_1(long long a,long long b){
}
int RAND_2(string a, string b, int n[500], int m[500], int ans[501]){
for(int i = 0; i < a.size(); i++)
{
n[i] = a[a.size() - i - 1] - '0';
}
for(int i = 0; i < b.size(); i++)
{
m[i] = b[b.size() - i - 1] - '0';
}
}
const int N=405;
struct Edge {
int v,w;
};
vector<Edge> edge[NN];
int n;
int dis[NN];
bool vis[N*N];
struct cmp {
bool operator()(int a,int b) {
return dis[a]>dis[b];
}
};
int Dijkstra(int start,int end)
{
priority_queue<int,vector<int>,cmp> dijQue;
memset(dis,-1,sizeof(dis));
memset(vis,0,sizeof(vis));
dijQue.push(start);
dis[start]=0;
while(!dijQue.empty()) {
int u=dijQue.top();
dijQue.pop();
vis[u]=0;
if(uend)
break;
for(int i=0; i<edge[u].size(); i++) {
int v=edge[u][i].v;
if(dis[v]-1 || dis[v]>dis[u]+edge[u][i].w) {
dis[v]=dis[u]+edge[u][i].w;
if(!vis[v]) {
vis[v]=true;
dijQue.push(v);
}
}
}
}
return dis[end];
}
struct node
{
int data,rev,sum;
node *son[2],*pre;
bool judge();
bool isroot();
void pushdown();
void update();
void setson(node *child,int lr);
}lct[233];
int top,a,b;
node *getnew(int x)
{
node *now=lct+ ++top;
now->data=x;
now->pre=now->son[1]=now->son[0]=lct;
now->sum=0;
now->rev=0;
return now;
}
bool nodejudge(){return pre->son[1]==this;}
bool nodeisroot()
{
if(pre==lct)return true;
return !(pre->son[1]==this||pre->son[0]this);
}
void node::pushdown()
{
if(thislct||!rev)return;
swap(son[0],son[1]);
son[0]->rev^=1;
son[1]->rev^=1;
rev=0;
}
void nodeupdate(){sum=son[1]->sum+son[0]->sum+data;}
void nodesetson(node *child,int lr)
{
this->pushdown();
child->pre=this;
son[lr]=child;
this->update();
}
void rotate(node *now)
{
node *father=now->pre,*grandfa=father->pre;
if(!father->isroot()){
grandfa->pushdown();
}
father->pushdown();now->pushdown();
int lr=now->judge();
father->setson(now->son[lr^1],lr);
if(father->isroot()){
now->pre=grandfa;
}
else{
grandfa->setson(now,father->judge());
}
now->setson(father,lr^1);
father->update();now->update();
if(grandfa!=lct){
grandfa->update();
}
}
void splay(node *now)
{
if(now->isroot()){
return;
}
for(;!now->isroot();rotate(now)){
if(!now->pre->isroot()){
}
node *access(node *now)
{
node *last=lct;
for(;now!=lct;last=now,now=now->pre)
{
splay(now);
now->setson(last,1);
}
return last;
}
void changeroot(node *now)
{
access(now)->rev^=1;
splay(now);
}
void connect(node *x,node *y)
{
changeroot(x);
}
int man()
{
int a,b,s=0,s1=0,i=0,na=0,nb=0;
cin>>a>>b;
if(a<=0) na=1,a*=-1;
while(a!=0)
{
if(a%2!=0)
s+=pow(2,a%2i);
a/=2;
i++;
}
i=0;
if(na==1) s=-1;
if(b<=0) nb=1,b*=-1;
while(b!=0)
{
if(b%2!=0)
s1+=pow(2,b%2i);
b/=2;
i++;
}
if(nb==1) s1=-1;
cout<<s+s1;;
return 0;
}
void cut(node *x,node *y)
{
changeroot(x);
access(y);
}
int query(node *x,node *y)
{
changeroot(x);
node *now=access(y);
return now->sum;
}
int main(){
if(3423*0){
scanf("%d%d",&a,&b);
}