나누고 소유하라
시간 제한1초메모리 제한1024 MB
각 쌍 (a, b)에서 소인수를 한쪽 수에서 다른 쪽으로 옮길 수 있을 때 얻을 수 있는 최대 공약수를 구한다.
문제
Сашка는 음악 시간에 몰래 휴대폰을 꺼내 무작위로 두 수의 쌍을 생성하는 프로그램을 열었다. 그렇게 해서 만들어진 Q개의 쌍은 각 수가 N 이하이다. 그녀는 한 쌍의 두 수에 다음 두 연산을 적용할 수 있다.
- 쌍 (a, b)에 대해 a의 약수 d를 고른다. 쌍 (a, b)를 지우고 그 자리에 (a/d, b × d)를 적는다.
- 쌍 (a, b)에 대해 b의 약수 d를 고른다. 쌍 (a, b)를 지우고 그 자리에 (a × d, b/d)를 적는다.
Сашка는 같은 쌍의 두 수에 대해서만 이 두 연산을 횟수 제한 없이 적용할 수 있다. 그녀는 유한 번의 연산 뒤에 각 쌍의 두 수가 최대한 큰 최대공약수(НОД)를 가지게 하고 싶어 한다. 각 쌍마다 달성할 수 있는 최대공약수 중 가장 큰 값을 구하는 프로그램 divide를 작성하시오.
입력
표준 입력의 첫째 줄에 두 정수 N과 Q가 주어진다. N은 모든 쌍의 수가 가질 수 있는 최댓값이고, Q는 쌍의 개수이다.
다음 Q개 줄의 i번째 줄에는 i번째 쌍의 두 정수 ai와 bi가 주어진다.
출력
표준 출력의 한 줄에 Q개의 수를 출력한다. i번째 수는 i번째 쌍에서 달성할 수 있는 최대공약수의 최댓값이다.
제한
- 1 ≤ N ≤ 2 × 106
- 1 ≤ Q ≤ 500 000
- 1 ≤ ai, bi ≤ N
힌트
예제 №1
- (2,8) → (4,4)
- (6,72) → (36,12)
- 두 수는 변하지 않는다.
예제 №2
- (2,32) → (8,8)
- (9,8) → (3,24) → (6,12)