#include <bits/stdc++.h>
using namespace std;

#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(a) max((a),-(a))
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define repe(i,n) rep(i,(n)+1)
#define per(i,n) for(int i=(int)(n)-1;i>=0;i--)
#define pere(i,n) rep(i,(n)+1)
#define all(x) (x).begin(),(x).end()
#define SP <<" "<<
#define RET return 0
#define MOD 1000000007
#define INF 1000000000000000000

typedef long long LL;
typedef long double LD;

int main(){
  int size=1000;
  vector<bool> hurui(size*size+1,true);
  hurui[0]=hurui[1]=false;
  for(int i=2;i<=size*size;i++){
    if(hurui[i]){
      for(int j=2*i;j<=size*size;j+=i) hurui[j]=false;
    }
  }
  vector<vector<int>> doukutu(size,vector<int>(size));
  int now=1;
  for(int i=0;i<size/2;i++){
    for(int j=size/2-i;j<=size/2+i;j++){
      doukutu[j][size/2-1-i]=now;
      now++;
    }
    for(int j=size/2-i;j<=size/2+i;j++){
      doukutu[size/2+i][j]=now;
      now++;
    }
    for(int j=size/2-1+i;j>=size/2-1-i;j--){
      doukutu[j][size/2+i]=now;
      now++;
    }
    for(int j=size/2-1+i;j>=size/2-1-i;j--){
      doukutu[size/2-1-i][j]=now;
      now++;
    }
  }
  // for(int i=0;i<size;i++){
  //   for(int j=0;j<size;j++) cout << doukutu[i][j] << " ";
  //   cout << endl;
  // }
  while(1){
    int m,n;
    cin >> m >> n;
    if(n==0) return 0;
    pair<int,int> ma;
    vector<vector<pair<int,int>>> dp(size,vector<pair<int,int>>(size,{0,0}));
    vector<vector<bool>> ok(size,vector<bool>(size,false));
    for(int i=0;i<size;i++){
      for(int j=0;j<size;j++){
        if(doukutu[i][j]==n) ok[i][j]=true;
        if(hurui[doukutu[i][j]]) dp[i][j].first++,dp[i][j].second=doukutu[i][j];
        if(ok[i][j]){
          if(i<999){
            for(int k=-1;k<=1;k++){
              if(0<=j+k&&j+k<size){
                if(doukutu[i+1][j+k]<=m){
                  ok[i+1][j+k]=true;
                  dp[i+1][j+k]=max(dp[i+1][j+k],dp[i][j]);
                }
              }
            }
          }
          ma=max(ma,dp[i][j]);
        }
      }
    }
    cout << ma.first SP ma.second << endl;
  }
  return 0;
}

