#include<stdio.h>
#include<math.h>
#define M 1000001
int MIN(int a,int b){
  if(a<b)return a;
  return b;
}
int MAX(int a,int b){
  if(a<b)return b;
  return a;
}
int m[1002][1002]={0};
char p[M]={1,1};
int X[]={0,1,0,-1};
int Y[]={-1,0,1,0};
int main(){
  int i,j,n,s,ny,nx,d=1,x=0,y=1,l,k,max;
  for(i=2;i*i<M;i++){
    if(p[i])continue;
    for(j=i*i;j<M;j+=i)p[j]=1;
  }
  for(i=0;i<1002;i++)m[0][i]=m[1001][i]=m[i][0]=m[i][1001]=1000002;
  for(i=1000000;i;i--){
    nx=x+X[d];
    ny=y+Y[d];
    if(m[ny][nx]){
      d=(d+1)%4;
      nx=x+X[d];
      ny=y+Y[d];
    }
    m[y=ny][x=nx]=i;
    }//*/
  //printf("%d\n",m[501][498+2]);
  while(scanf("%d %d",&n,&s),n||s){
    int dp[1002][1002]={0};//printf("a\n");
    for(i=l=0;i<1000000;i++){
      if(m[i/1000+1][i%1000+1]==s){
	y=i/1000+1;
	x=i%1000+1;
	break;
      }
    }//printf("%d %d b\n",y,x);
    dp[y][x]=max=1-p[s];//printf("d\n");
    if(max)l=s;
    d=sqrt(n)/2+1;//printf("%d\n",d);
    for(i=0;y+i<MIN(1000,501+d);i++){
      for(j=MAX(1,x-i);j<=MIN(1001,x+i);j++){
	for(k=0;k<3;k++){//printf("%d ",m[y+i+1][j+k-1]);
	  if(m[y+i+1][j+k-1]>n)continue;//printf("%d ",m[y+i+1][j+k-1]);
	  dp[y+i+1][j+k-1]=MAX(dp[y+i+1][j+k-1],dp[y+i][j]+1-p[m[y+i+1][j+k-1]]);
	  if(max==dp[y+i+1][j+k-1]&&1-p[m[y+i+1][j+k-1]]){
	    l=MAX(l,m[y+i+1][j+k-1]);
	  }
	  if(max<dp[y+i+1][j+k-1]){
	    max=dp[y+i+1][j+k-1];
	    l  = m[y+i+1][j+k-1];
	  }//printf("d\n");
	}
      }//printf("\n");
    }
    if(max==0)l=0;
    printf("%d %d\n",max,l);
  }
  return 0;
}  