#include <iostream>
#include <utility>
#include <vector>
using namespace std;
const int MAX = 1000000;
const int w = 1010;
const int center = w/2;
vector<vector<int> > caves(w,vector<int>(w,-1));
vector<int> sosuu(MAX+1,1);
int n;
int st;
int stX;
int stY;
void makeCaves(){
  caves = vector<vector<int> >(w,vector<int>(w,-1));
  int dir = 3;//0 右 1 上 2 左 3 下
  int dx[4] = {1,0,-1,0};
  int dy[4] = {0,1,0,-1};
  int x = center;
  int y = center;
  caves[x][y] = 1;
  if(st == 1){
    stX = x;
    stY = y;
    
  }
  for(int i = 2;i <= n;i++){
    int left = (dir+1)%4;
    if(caves[dx[left]+x][dy[left]+y] == -1){
      dir = left;
    }
    x = x+dx[dir];
    y = y+dy[dir];
    caves[x][y] = i;
    if(i == st){
      stX = x;
      stY = y;
    }
  }
}
void makeSosuu(){
  sosuu[0] = 0;
  sosuu[1] = 0;
  for(int i = 2;i <= MAX;i++){
    if(sosuu[i]){
      for(int j = i+i;j <= MAX;j = j+i){
	sosuu[j] = 0;
      }
    }
  }
}/*
void dpSearch(vector<vector<par<int,int> > > &dp,int cx,int cy){
  
  

  } */
int main(){
  // pair<int,int> dp();
  makeSosuu();
  while(true){
    cin >> n >> st;
    if(n == 0 && st == 0)break;
    makeCaves();
    vector<vector<pair<int,int> > > dp(w,vector<pair<int,int> >(w,pair<int,int>(-1,-1)));
    int dx[3] = {-1,0,1};
    int dy[3] = {-1,-1,-1};
    if(sosuu[st]){
      dp[stX][stY].first = 1;
      dp[stX][stY].second = st;
    }else{
      dp[stX][stY].first = 0;
      dp[stX][stY].second = 0;
    }
    //    cout << stX-center << " " << stY-center << endl;
    pair<int,int> ans;//(dp[stX][stY].first,dp[stX][stY].second);
    ans = dp[stX][stY];
    //    cout << ans.first << " " << ans.second << endl;
    for(int i = stY;i > 0;i--){
      for(int j = 1;j < 1001;j++){
	for(int k = 0;k <3;k++){
	  //cout << i << " " << j << endl;
	  int nx = j+dx[k];
	  int ny = i+dy[k];

	  if(caves[nx][ny] != -1 && dp[j][i].first != -1){
	    if(dp[nx][ny].first < dp[j][i].first + sosuu[caves[nx][ny]]){
	      dp[nx][ny].first = dp[j][i].first + sosuu[caves[nx][ny]];
	      if(sosuu[caves[nx][ny]]){
		dp[nx][ny].second = caves[nx][ny];
	      }else{
		dp[nx][ny].second = dp[j][i].second;
	      }
	      if(ans < dp[nx][ny]){
		ans = dp[nx][ny];
	      }
	    }
	  } 
	} 
      }
    }
    cout << ans.first << " " << ans.second << endl;
  }
  
  return 0;
}