/*
TASK:crazy
LANG:C++
*/
#include <stdio.h>
#include "module.h"
#include <math.h>
using namespace std;

const int N = 1024;
const int UNKNOWN = -2;

const int WIN = 1;
const int LOSE =0;

int f[N][N];

long n, m;
int i, j;


bool IsPrime(int val){
	for(int i=2; i<=sqrt(val); i++)
  	if(val % i == 0)
    	return false;
	return true;
}

bool PPrime(int p, int q){
	for(int i=2; i<=p; i++)
  	if(p % i == 0 && q % i == 0)
    	return true;
	return false;
}

bool F(int p, int q){


	if(f[p][q] != UNKNOWN)
  	return f[p][q];

  if(IsPrime(p) && IsPrime(q)){
  	f[p][q] = LOSE;
  	return f[p][q];
	}

	int best_p = UNKNOWN;
  int best_q = UNKNOWN;



  f[p][q] = LOSE;

  int i;
  for(i=2; i<p; i++)
  	if(PPrime(i, p) && F(i, q+1) == LOSE){
        f[p][q] = WIN;
        return f[p][q];
      }

  for(i=2; i<q; i++)
  	if(PPrime(i, q) && F(p+1, i) == LOSE){
        f[p][q] = WIN;
        return f[p][q];
      }
      
	return f[p][q];
  
}

int max(int p, int q){
	return p > q ? p : q;
}


int main(){
  do{
	  getnum(&n, &m);

    for(i=0; i<N; i++)
	  	for(j=0; j<N; j++)
  	  	f[i][j] = UNKNOWN;

    F(n, m);

    for(i=2; i<max(n,m); i++){
    	if(f[i][m+1] == LOSE){
      	setnum(i, m+1);
        break;
      }
      if(f[n+1][i] == LOSE){
      	setnum(n+1, i);
        break;
      }
    }
    
  }while(1);
  
  return 0;
}
