정민이의 수열 제조법

시간 제한1초메모리 제한1024 MB

요약
제곱과 곱셈을 반복해 1부터 N까지 모든 수를 만들 수 있는 초기 정수 집합을 구하고, 그 집합에서 a 이상 b 이하인 원소의 개수를 묻는 질문에 답한다.
난이도

보통10점 중 7점

유형
정수론, 수학, 구현, 정렬
정답자
아직 제출이 없습니다

문제

정민이는 11부터 NN까지 한 개씩 들어있는 수열을 만드는 것을 목표로 한다. 이를 위해 최소 개수의 양의 정수가 들어있는 수열을 준비했고, 목표를 달성할 때까지 다음 작업들을 반복했다.

  • 수열에 있는 한 정수를 제곱한 수를 수열에 추가한다.
  • 수열에 있는 두 정수를 곱한 수를 수열에 추가한다.

익준이는 모든 작업을 마친 정민이를 보고 어떤 정수들을 가지고 처음 작업을 시작했는지 물었다. 그러자 정민이는 답을 알려주는 대신 익준이가 aa와 bb를 물어보면 초기 정수 중 aa 이상 bb 이하인 정수들의 개수를 알려 주겠다고 했다. 익준이는 질문을 총 MM번 할 것이다.

익준이의 질문에 답을 해주자.

입력

첫 번째 줄에 정수 N,MN,M이 공백으로 구분되어 주어진다. (1≤N≤5,000,000;1≤M≤1,000,000)(1 \le N \le 5\\,000\\,000;1 \le M \le 1\\,000\\,000)

두 번째 줄부터 MM개의 줄에 정수 a,ba,b가 공백으로 구분되어 주어진다. (1≤a≤b≤N)(1 \le a \le b \le N)

출력

MM개의 줄에 각 질문의 답을 출력한다.

힌트

Python 3 사용자는 PyPy3로 제출할 것을 권장한다.

예제2

  1. 예제 1

    입력
    50 4
    1 15
    5 6
    20 40
    40 50
    
    예상 출력
    7
    1
    4
    3
    
  2. 예제 2

    입력
    5000000 5
    2 10
    2 3
    2 5000000
    3 10000
    5 5
    
    예상 출력
    4
    2
    348513
    1228
    1