#include <stdio.h>

typedef struct rect{
	int w;
	int h;
	int d;  /* 対角線の長さの 2 乗 */
} Rect;

void set(Rect *r, int w, int h){
	r->w = w;
	r->h = h;
	r->d = w * w + h * h;
}

/* 横長整長方形の大きさを比較する (-1: a が小さい, 0:等しい, 1: a が大きい) */
int compare(Rect a, Rect b){
	/* 対角線の長さが短いほうが小さい */
	if (a.d < b.d){
		return -1;
	}else if (a.d > b.d){
		return 1;
	}

	/* 高さの低いほうが小さい */
	if (a.h < b.h){
		return -1;
	}else if (a.h > b.h){
		return 1;
	}

	return 0;
}

int main(void){
	Rect min;  /* 与えられた横長整長方形 */
	Rect r;
	Rect max;
	int w, h, i, j;
	int c;

	while(scanf("%d %d", &h, &w) == 2){
		if (w == 0 && h == 0){
			break;
		}

		set(&min, w, h);
		set(&max, 150, 150);

		/* 与えられた横長整長方形より大きい最小の横長整長方形を総当たりで求める */
		for (i = 2; i <= 150; i++){
			for (j = 1; j < i; j++){
				set(&r, i, j);

				/* 与えられた横長整長方形より大きいか */
				c = compare(r, min);
				if (c <= 0){
					continue;
				}

				/* 条件を満たす横長整長方形の中で最小か */
				c = compare(r, max);
				if (c < 0){
					max = r;
				}
				break;
			}
		}

		/* 出力 */
		printf("%d %d\n", max.h, max.w);
	}

    return 0;
}