N = int(input())
k = int(input())
start = 1
end = N**2
result = 0
while start <= end:
mid = (start+end) // 2
cnt = 0
for i in range(1, N+1):
cnt += min(mid//i, N)
if cnt < k:
start = mid + 1
else:
end = mid - 1
result = mid
print(result)
본 문제는 이진 탐색의 전형적인 코드 모습을 보이지만, 각 행마다 (mid // i) 개수 만큼의 작은 수를 갖는다는 생각을 떠올리기는 어려운 문제이다.