#include <cstdio>
using namespace std;

const int SIZE = 1000;
bool prime[SIZE * SIZE + 1];
int table[SIZE][SIZE];
int dp[SIZE][SIZE];
int pr[SIZE][SIZE];

int main() {
	int m, n;
	int y = 500, x = 499;
	int a = 1;

	prime[0] = true;prime[1] = true;
	for (int i = 2;i <= SIZE*SIZE;i++) {
		if (!prime[i]) {
			for (int j = i * 2;j <= SIZE*SIZE;j += i) {
				prime[j] = true;
			}
		}
	}
	
	table[y][x] = a;a++;x++;
	for (int i = 1;i < SIZE;i++) {
		for (int j = 0;j < i;j++) {
			table[y][x] = a;
			a++;
			if (i % 2 == 0)y++;
			else y--;
		}
		for (int j = 0;j < i + 1;j++) {
			table[y][x] = a;
			a++;
			if (i % 2 == 0)x++;
			else x--;
		}
	}
	while(true) {
		scanf("%d %d", &m, &n);
		if (m == 0 || n == 0)return 0;
		
		for (int i = 0;i < SIZE;i++) {
			for (int j = 0;j < SIZE;j++) {
				dp[i][j] = 0;
				pr[i][j] = 0;
			}
		}
		
		for(int i = SIZE - 1;i >= 0;i--){
			for(int j = SIZE - 1;j >= 0;j--){
				if (table[i][j] <= m) {
					if (i + 1 < SIZE) {
						if (j > 0 && table[i + 1][j - 1] <= m){
							if (dp[i][j] < dp[i + 1][j - 1] || (dp[i][j] == dp[i + 1][j - 1] && pr[i][j] < pr[i + 1][j - 1])) {
								dp[i][j] = dp[i + 1][j - 1];
								pr[i][j] = pr[i + 1][j - 1];
							}
						}
						if (table[i + 1][j] <= m){
							if (dp[i][j] < dp[i + 1][j] || (dp[i][j] == dp[i + 1][j] && pr[i][j] < pr[i + 1][j])) {
								dp[i][j] = dp[i + 1][j];
								pr[i][j] = pr[i + 1][j];
							}
						}
						if (j + 1 < SIZE && table[i + 1][j + 1] <= m){
							if (dp[i][j] < dp[i + 1][j + 1] || (dp[i][j] == dp[i + 1][j + 1] && pr[i][j] < pr[i + 1][j + 1])) {
								dp[i][j] = dp[i + 1][j + 1];
								pr[i][j] = pr[i + 1][j + 1];
							}
						}
					}
					if (!prime[table[i][j]]) {
						dp[i][j]++;
						if (pr[i][j] == 0) {
							pr[i][j] = table[i][j];
						}
					}
				}
			}
		}
		
		for (int i = 0;i < SIZE;i++) {
			for (int j = 0;j < SIZE;j++) {
				if (table[i][j] == n) {
					printf("%d %d\n", dp[i][j], pr[i][j]);
				}
			}
		}
	}
}