#include <stdio.h>
#include <string.h>
void add(int A[], int B[])
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
void mul(int A[], int B[])
{
int i, j, t, C[50];
memset(C, 0, sizeof(C));
for (i = 1; i <= A[0]; i++)
{
for (t=0, j=1; j <= B[0] || t; j++, t/=10)
C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
if (i + j - 2 > C[0]) C[0] = i + j - 2;
}
memcpy(A, C, sizeof(C));
}
void div(int A[], int B)
{
int i, t = 0;
for (i = A[0]; i > 0; i--, t %= B)
A[i] = (t = t * 10 + A[i]) / B;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void invert (int A[])
{
int i = 0,t = 0;
for (i = 1; i <= A[0] / 2; i++)
{
t = A[i];
A[i] = A[ A[0] - i + 1 ];
A[ A[0] - i + 1 ] = t;
}
}
void copy (int A[],int B[])
{
int i = 0;
memset(A,0,sizeof(A));
for (i=0; i<=B[0]; i++)
A[i]=B[i];
}
int main()
{
int A[50],B[50],C[50],D[50],i;
char c;
for (i=0; i<31; i++)
{
A[i]=0; B[i]=0; C[i]=0;
}
FILE *in=fopen("tort.in","r");
fscanf(in,"%c",&c);
while (c!=' ')
{
A[++A[0]]=c-'0';
fscanf(in,"%c",&c);
}
fscanf(in,"%c",&c);
while (c!=10)
{
B[++B[0]]=c-'0';
fscanf(in,"%c",&c);
}
fclose(in);
invert(A);
invert(B);
C[0]=1; C[1]=1;
if (!(A[0]==1 && A[1]==0) && !(B[0]==1 && B[1]==0) )
{
copy(D,A);
C[0]=1; C[1]=1;
add(B,C);
mul(D,B);
add(A,C);
copy (C,B);
mul(B,B);
add(B,C);
div(B,2);
mul(B,A);
copy (A,D);
add(A,B);
}
else
{
if (!(A[0]==1 && A[1]==0) && (B[0]==1 && B[1]==0))
{
C[0]=1; C[1]=1;
add(A,C);
copy(C,A);
mul(A,A);
add(A,C);
div(A,2);
}
if ((A[0]==1 && A[1]==0) && !(B[0]==1 && B[1]==0))
{
C[0]=1; C[1]=1;
add(B,C);
copy(C,B);
mul(B,B);
add(B,C);
div(B,2);
copy(A,B);
}
if ((A[0]==1 && A[1]==0) && (B[0]==1 && B[1]==0))
A[1]=1;
}
FILE *out=fopen("tort.out","w");
for (i=A[0]; i>0; i--)
fprintf(out,"%d",A[i]);
fprintf(out,"\n");
fclose(out);
return 0;
}