#include <iostream>
#include<algorithm>
#include<vector>

using namespace std;

int map[1001][1000], dp[1001][1000], dp2[1001][1000], sosu[1000001];
int y[] = { 0, -1, 0, 1 }, x[] = { 1, 0, -1, 0 }, maxh, maxw, minh, minw, ansH, ansW;
int m, n;

void hantei(int h, int w) {
	maxh = max(maxh, h);
	maxw = max(maxw, w);
	minh = min(minh, h);
	minw = min(minw, w);
}

void setMap() {
	int h = 500, w = 500, muki = 0;
	map[h][w] = 1;
	for (int i = 2; i <= m; i++) {
		if (map[h + y[muki]][w+x[muki]] <= 0) {
			hantei(h+y[muki], w+x[muki]);
			map[h + y[muki]][w+x[muki]] = i;//????????£????????????
			h += y[muki];
			w += x[muki];
			if (map[h][w] == n) {
				ansH = h;
				ansW = w;
			}
			muki = (muki + 1) % 4;
		}
		else {
			if (muki - 1 >= 0) {
				map[h + y[muki-1]][w + x[muki-1]] = i;//
				h += y[muki - 1];
				w += x[muki - 1];
				if (map[h][w] == n) {
					ansH = h;
					ansW = w;
				}
			}
			else {
				map[h + y[3]][w + x[3]] = i;//
				h += y[3];
				w += x[3];
				if (map[h][w] == n) {
					ansH = h;
					ansW = w;
				}
			}
		}
	}
}

void eratosthenes() {
	sosu[0] = 1;
	sosu[1] = 1;
	for (int i = 2; i <= 1000000; i++) {
		if (sosu[i] == 0) {
			for (int j = 2; j*i <= 1000000; j++) {
				sosu[j*i]++;
			}
		}
	}
}

void DP() {
	for (int i = maxh; i >= minh; i--) {
		for (int j = maxw; j >= minw; j--) {
			for (int k = -1; k <= 1; k++) {
				if (minw <= j + k && maxw >= j + k) {
					if (dp[i][j] < dp[i + 1][j + k]) {
						dp[i][j] = dp[i + 1][j + k];
						dp2[i][j] = dp2[i + 1][j + k];
						//printf("a1\t");
					}
					else if (dp[i][j] == dp[i + 1][j + k] && dp2[i][j] < dp2[i + 1][j + k]) {
						dp2[i][j] = dp2[i + 1][j + k];
						//printf("a2\t");
					}
				}
			}
			if (sosu[map[i][j]] == 0) {//???????¶??????????????????¨?????????????????£????????????????????????
				//printf("a3\t");
				dp[i][j]++;
				if (dp[i][j] == 1) {
					dp2[i][j] = map[i][j];
				}
			}
		}
	}
}

int main() {
	vector<int>v,v2;
	eratosthenes();

	while (cin >> m >> n, m || n) {
		maxh = 0, maxw = 0, minh = 9999999, minw = 9999999;
		for (int i = 0; i < 1001;i++) {
			for (int j = 0; j < 1000;j++) {
				map[i][j] = 0;
				dp[i][j] = 0;
				dp2[i][j] = 0;
			}
		}
		setMap();
		DP();
		if (n == 1) {
			ansH = 500, ansW = 500;
		}
		v.push_back(dp[ansH][ansW]);
		v2.push_back(dp2[ansH][ansW]);
		
	}

	for (int i = 0; i < v.size(); i++) {
		cout << v.at(i) << " " << v2.at(i) << endl;
	}
}