R, B = map(int, input().split()) def knapsack(n): a = min(n, 11) SUM = a*(a+1)*(a*2+1)//6 SUM2 = n*(n+1)*(n*2+1)//6 dp = [False]*(SUM+1) dp[0] = True for i in range(1, a+1): b = i*i for j in reversed(range(SUM+1)): if dp[j]: dp[j+b] = True if a == n: ans = [] for i in range(SUM+1): if not dp[i]: ans.append(i) return ans L, R = [], [] for i in range(200): if not dp[i]: L.append(i) R.append(SUM2-i) return L+R[::-1] def func(n): SUM = n*(n+1)*(n*2+1)//6 if R+B < SUM: return False IDX = [-1]+knapsack(n)+[SUM+1] c = -1 for i in reversed(range(len(IDX)-1)): l, r = IDX[i], IDX[i+1] if l+1 < r and l+1 <= R: c = min(r-1, R) break if c == -1: return False return SUM-c <= B left = 0 right = 10**18 while left+1 < right: mid = (left+right)//2 if func(mid): left = mid else: right = mid print(left)