#include <stdio.h>
#include <stdlib.h>
#define maxm 1004004
#define h 1002
#define w 1002

int is_prime[maxm + 1], nums[h][w], dp1[h][w], dp2[h][w], posx[maxm + 1], posy[maxm + 1];

int max(int a, int b){
	return a >= b ? a : b;
}

int main(){
	int m, n, i, j, d, k;
	int dx[] = {0, 1, 0, -1};
	int dy[] = {1, 0, -1, 0};
	for(i = 0; i <= maxm; i++){
		is_prime[i] = 1;
	}
	is_prime[0] = 0;
	is_prime[1] = 0;
	for(i = 2; i <= maxm; i++){
		for(j = 2; i * j <= maxm; j++){
			is_prime[i * j] = 0;
		}
	}
	for(i = 0; i < h; i++){
		for(j = 0; j < w; j++){
			nums[i][j] = 0;
		}
	}
	for(n = maxm, d = 0, i = 0, j = 0; n > 0; n--){
		nums[i][j] = n;
		posx[n] = i;
		posy[n] = j;
		if(i + dx[d] < 0 || h <= i + dx[d] || j + dy[d] < 0 || w <= j + dy[d]){
			d = (d + 1) % 4;
		}
		else if(nums[i + dx[d]][j + dy[d]] > 0){
			d = (d + 1) % 4;
		}
		i += dx[d];
		j += dy[d];
	}
	while(1){
		scanf("%d%d", &m, &n);
		if(m == 0 && n == 0){
			return 0;
		}
		for(i = 0; i < h; i++){
			for(j = 0; j < w; j++){
				dp1[i][j] = 0;
				dp2[i][j] = 0;
			}
		}
		for(i = h - 2; i > 0; i--){
			for(j = 1; j < w - 1; j++){
				if(nums[i][j] <= m){
					dp1[i][j]--;
					if(is_prime[nums[i][j]] == 1){
						dp1[i][j]--;
					}
					for(k = -1; k <= 1; k++){
						if(dp1[i][j] < dp1[i + 1][j + k]){
							dp1[i][j] = dp1[i + 1][j + k];
							dp2[i][j] = dp2[i + 1][j + k];
						}
						else if(dp1[i][j] == dp1[i + 1][j + k]){
							dp2[i][j] = max(dp2[i][j], dp2[i + 1][j + k]);
						}
					}
					if(is_prime[nums[i][j]] == 1){
						if(dp1[i][j] == 0){
							dp2[i][j] = nums[i][j];
						}
						dp1[i][j]++;
					}
				}
			}
		}
		printf("%d %d\n", dp1[posx[n]][posy[n]], dp2[posx[n]][posy[n]]);
	}
}
