/*
TASK:crazy
LANG:C
*/
#include <stdio.h>
#include "module.h"
#define MAX 555
#define iNf 2000000000

void Init();
long rec(long x, long y);

/****************************************************************************/
/*void getnum(long *aa,long *bb)
{
 scanf("%ld%ld",aa,bb);
}
void setnum(long aa,long bb)
{
 printf("%ld %ld\n",aa,bb);
}
/****************************************************************************/

int sim[MAX];
int pro[MAX];
int arr[MAX][MAX];
int pos[MAX][MAX];

long X,Y,xx,yy;

int main()
{
 Init();
 while(1)
   {
   getnum(&X,&Y);
   rec(X,Y);
   setnum(xx,yy);
   }
return 0;
}

long rec(long x, long y)
{int win,i,p,a;
 long tmp,min,max;

 if(x!=X||y!=Y)
  if(pos[x][y]) return arr[x][y];
 pos[x][y]=1;
 if(pro[x]&&pro[y]) return arr[x][y]=0;

 max=-iNf;
 min=iNf;
 win=0;
 
 if(!pro[x])
  for(i=1; sim[i]<x; i++)
   if(x%sim[i]==0)
    for(a=sim[i]; a<x; a+=a)
     {
     tmp=rec(a,y+1);
     if(tmp<=0)
       {
       win=1;
       if(tmp>max)
         {
         max=tmp;
         if(x==X&&y==Y)
           {
           xx=a;
           yy=y+1;
           }
         }
       }else
       {
       if(tmp<min) min=tmp;
       }
     }
 if(!pro[y])
  for(i=1; sim[i]<y; i++)
   if(y%sim[i]==0)
    for(a=sim[i]; a<y; a+=a)
     {
     tmp=rec(x+1,a);
     if(tmp<=0)
       {
       win=1;
       if(tmp>max)
         {
         max=tmp;
         if(x==X&&y==Y)
           {
           xx=x+1;
           yy=a;
           }
         }
       }else
       {
       if(tmp<min) min=tmp;
       }
     }
 if(win) return arr[x][y]=-max+1;
 return arr[x][y]=-min-1;
}

void Init()
{int i,p,bol;
 for(i=0; i<MAX; i++)
  {
  pro[i]=0;
  for(p=0; p<MAX; p++)
   pos[i][p]=0;
  }
 sim[0]=1;
 sim[1]=2;
 pro[2]=1;
 for(i=3; i<MAX; i++)
   {
   bol=1;
   for(p=1; p<=sim[0]; p++)
    if(i%sim[p]==0) bol=0;
   if(bol)
     {
     sim[0]++;
     sim[sim[0]]=i;
     pro[i]=1;
     }
   }
}
