/*
TASK:crazy
LANG:C
*/

#include <stdio.h>
#include "module.h"

#define MAXN 1024

long mas[MAXN];
long x[2];
long p[2][MAXN],pc[2];
long m[2][MAXN],mc[2];
long u[2][MAXN];
long r[2];

/*long test[2][3]={
6,4,5,
3,1,3
};*/

long dc(long a)
{
  long i,c;
  c=0;
  for(i=2;(i*i)<=a;i++)
  {
    if(a%i) continue;
    while(!(a%i))
    {
      a/=i;
      c++;
    }
  }
  return c;
}

int comp(const void *a, const void *b)
{
  return *(long *)a - *(long *)b;
}

int main()
{
  long i,j;
  //qsort(test[0],3,sizeof(long),comp);
  //printf("%d %d %d\n",test[0][0],test[0][1],test[0][2]);
  //freopen("kon.txt","w",stdout);

  for(i=1;i<MAXN;i++) mas[i]=i;
  for(i=2;i<MAXN;i++)
  {
    if(mas[i]!=i) continue;
    for(j=(i+i);j<MAXN;j+=i) mas[j]=0;
    mas[i]=1;
  }
  //for(i=1;i<1024;i++) printf("%d ",mas[i]);

  while(1)
  {
    getnum(&x[0],&x[1]);
    if(mas[x[0]+1] && !mas[x[1]])
    {//printf("konA %ld %ld\n",x[0],x[1]);
      for(i=2;(i*i)<=x[1];i++)
        if(!(x[1]%i)) setnum(x[0]+1,i);
    }
    else if(mas[x[1]+1] && !mas[x[0]])
    {
      for(i=2;(i*i)<=x[0];i++)
        if(!(x[0]%i)) setnum(i,x[1]+1);
    }
    else
    {
      int t;

      for(i=1;i<x[0];i++) u[0][i]=0;
      for(i=1;i<x[1];i++) u[1][i]=0;
      //printf("kon\n");
      t=x[0];
      for(i=2;(i*i)<=t;i++)
      {
        if(t%i) continue;
        p[0][pc[0]]=i;
        pc[0]++;
        while(!(t%i)) t/=i;
      }
      for(i=0;i<pc[0];i++)
      {
        for(j=p[0][i];j<x[0];j+=p[0][i])
        {
          if(u[0][j]) continue;
          u[0][j]=1;
          m[0][mc[0]]=j;
          mc[0]++;
        }
      }
      qsort(m[0],mc[0],sizeof(long),comp);

      t=x[1];
      for(i=2;(i*i)<=t;i++)
      {
        if(t%i) continue;
        p[1][pc[1]]=i;
        pc[1]++;
        while(!(t%i)) t/=i;
      }
      for(i=0;i<pc[1];i++)
      {
        for(j=p[1][i];j<x[1];j+=p[1][i])
        {
          if(u[1][j]) continue;
          u[1][j]=1;
          m[1][mc[1]]=j;
          mc[1]++;
        }
      }
      qsort(m[1],mc[1],sizeof(long),comp);

      r[0]=m[0][0];
      r[1]=m[1][0];
      for(i=0;i<mc[0];i++)
      {
        if(!mas[m[0][i]+1])
        {
         r[0]=m[0][i];
         break;
        }
      }
      for(i=0;i<mc[1];i++)
      {
        if(!mas[m[1][i]+1])
        {
         r[1]=m[1][i];
         break;
        }
      }
      x[0]++;
      x[1]++;
       // printf("kon %ld %ld\n",x[0],x[1]);
      if(mas[x[0]+1] || mas[r[1]+1])
      {  //printf("kon1\n");
        setnum(r[0],x[1]);
      }
      else if(mas[x[1]+1] || mas[r[0]+1])
      { //printf("kon2\n");
        setnum(x[0],r[1]);
      }
      else
      { //printf("kon3\n");
        if((dc(x[0])+dc(r[1]))>(dc(x[1])+dc(r[0]))) setnum(r[0],x[1]);
        else setnum(x[0],r[1]);
      }
    }
  }
  
  return 0;
}

