/*
TASK: crazy
LANG: C
*/

/*
Sledva6tiq pyt neka pi6em na list4e i naum da si kompilirame...
Nqmam dumi prosto...
*/

#include <stdio.h>
#include "module.h"
#define INF (1 << 29)
#define MAX (1 << 5)
#define MAXQ (MAX * MAX)

int gcd (int a, int b)  {
  int t;

  if (a < b)  {
    t = a; a = b; b = t;
  }

  if (a % b == 0)
    return b;

  return gcd (b, a % b);
}

int prm (int num)  {
  int i;

  if (num == 1) return 0;
  if (num == 2) return 1;
  if (num % 2 == 0) return 0;

  for (i = 3; i * i <= num; i += 2)
    if (num % i == 0)
      return 0;

  return 1;
}


typedef struct  {
  int x, y;
} pt;

int o[MAX][MAX];
int a[MAX][MAX];
pt m[MAX][MAX];
int ps[MAX], pn;
int gcds[MAX][MAX];
int lim;

pt q[MAXQ];
int qb, qe, ql;

void qa (pt e)  {
  int t;

  ++ql;
  if (e.x > e.y)  {
    t = e.x; e.x = e.y; e.y = t;
  }
  q[qe] = e;
  qe = qe == MAXQ - 1 ? 0 : qe + 1;
}

pt qr ()  {
  pt e;

  --ql;
  e = q[qb];
  qb = qb == MAXQ - 1 ? 0 : qb + 1;

  return e;
}

void init ()  {
  int i, j;
  pt e;

  lim = 20;
  for (i = 2; i <= lim; ++i)
    if (prm (i))
      ps[++pn] = i;

  for (i = 1; i <= lim; ++i)
    for (j = 1; j <= lim; ++j)
      gcds[i][j] = gcd (i, j);

  for (i = 1; i <= lim; ++i)
    for (j = 1; j <= lim; ++j)
      o[i][j] = INF;

  for (i = 1; i <= pn; ++i)
    for (j = i + 1; j <= pn; ++j)  {
      e.x = ps[i];
      e.y = ps[j];
      qa (e);
      o[i][j] = 1;
    }
}

void upd (int x, int y)  {
  int i, j;
  pt e, t;

  e.x = x;
  e.y = y;
  
  for (i = 2; i <= x - 1; ++i)
    if (gcds[i][x] != 1)  {
      t.x = i;
      t.y = y + 1;
      if (a[x][y] == 0)  {
        if (a[i][y + 1] == 0)  {
	  a[i][y + 1] = a[y + 1][i] = 1;
          o[i][y + 1] = o[y + 1][i] = o[x][y] + 1;
          m[i][y + 1] = m[y + 1][i] = e;
          qa (t);
        }
        else  {
          if (o[i][y + 1] > o[x][y] + 1)  {
            o[i][y + 1] = o[y + 1][i] = o[x][y] + 1;
            m[i][y + 1] = m[y + 1][i] = e;
            qa (t);
          }
        }
      }
      else  {

      }
    }
}

void think ()  {
  int k, i, j, tl, cx, cy;
  pt e;

  for (;ql;)  {
    tl = ql;
    for (k = 1; k <= ql; ++k)  {
      e = qr ();
      upd (e.x, e.y);
      upd (e.y, e.x);
    }
  }
}

void print ()  {
  long x, y, i;

  for (;;)  {
    getnum (&x, &y);
    for (i = y - 1; 2 <= i; --i)
      if (gcd (i, y) != 1)
	break;
    if (i > 1)
      setnum (x + 1, i);
    else  {
      for (i = x - 1; 2 <= i; --i)
	if (gcd (i, x) != 1)
	  break;
      setnum (i, y + 1);
    }
  }
}

int main ()  {
  init ();
  think ();
  print ();

  return 0;
}

