# generated by AI # Python 3 解法 import sys from math import isqrt def solve(): data = sys.stdin.read().strip().split() if not data: return N = int(data[0]); M = int(data[1]) if N == 1: print("NaN") return s = isqrt(N) if s * s == N: # 完全平方数の場合:答えは M + floor((M-1)/(s-1)) if s == 1: # 既に N==1 のケースで除外済みだが安全のため print("NaN") return ans = M + (M - 1) // (s - 1) print(ans) return # N が完全平方でない場合(√N は無理数) # 二分探索で最小の x を求める: good(x) >= M # 上限の見積もり: beta = sqrt(N)/(sqrt(N)-1) が最大となるのは N=2 あたりで # M が最大 1e6 なので 3*M + margin を上限とする(十分余裕あり) lo = 1 hi = 3 * M + 100 # 安全マージン def good_count(x): # bad = 最大の m >=0 で m^2 * N < (x+1)^2 # つまり m^2 <= ((x+1)^2 - 1) // N t = (x + 1) # compute ((x+1)^2 - 1) // N safely with big ints numerator = t * t - 1 q = numerator // N bad = isqrt(q) return x - bad # 二分探索(最小の x with good_count(x) >= M) ans = -1 while lo <= hi: mid = (lo + hi) // 2 if good_count(mid) >= M: ans = mid hi = mid - 1 else: lo = mid + 1 if ans == -1: print("NaN") else: print(ans) if __name__ == "__main__": solve()