import sys
# 利用HashMap来将任务升维度来降低时间复杂度
def main():
# 读取所有的行
lines = sys.stdin.readlines()
# 将输入转化为一个二维数组,每一行都是其中的一个一维数组
lines = [l.strip().split() for l in lines if l.strip()]
# 获得工作的数量和工人的数量
n, m = int(lines[0][0]), int(lines[0][1])
# res包括了所有工作所需要的能力和所有工人的能力
res = [0] * (n + m)
# 得到每个工人的能力的数组
abilities = list(map(int, lines[-1]))
# 设立一个maps,这个maps到最后会包括无论是工作能力到报酬的映射
# 和工人能力到报酬的映射
# 最后形成一个能力到最大报酬的映射
maps = dict()
# 初始化这个字典
for index, l in enumerate(lines[1:-1]):
d, s = int(l[0]), int(l[1])
maps[d] = s
res[index] = d
for index, ability in enumerate(abilities):
res[index + n] = ability
if ability not in maps:
maps[ability] = 0
# 将能力排序
res.sort()
# 在遍历的时候maxSalary会记录下遍历到此为止的最大报酬
maxSalary = 0
# 开始根据报酬遍历
for index in range(n + m):
maxSalary = max(maxSalary, maps[res[index]])
maps[res[index]] = maxSalary
# 根据工人的能力按顺序取得报酬
for index in range(m):
print(maps[abilities[index]])
if __name__ == '__main__':
main()
import sys
import math
# 贪心,动态规划
def main():
sys.stdin = open("input.txt", 'r')
line = sys.stdin.readline()
line = list(map(int, line.strip().split()))
k = line[0]
n = line[1]
end = n
dp = [float('Inf')] * (n + 1)
dp[k] = 0
for i in range(k, n):
# 如果是Inf说明这个地方跳不到
if dp[i] == float('Inf'):
continue
# 在[2~math.sqrt(i)]遍历查找i的约数
for j in range(2, int(math.sqrt(i)) + 1):
# j是约数
if i % j == 0:
if i + j <= end:
dp[i + j] = min(dp[i + j], 1 + dp[i])
# i//j是和j对称的约数
if i + i//j <= end:
dp[i + i//j] = min(dp[i + i//j], 1 + dp[i])
if dp[-1] != float('Inf'):
print(dp[-1])
else:
print(-1)
if __name__ == '__main__':
main()