import sys def euler_sieve(n_max): if n_max < 2: return [] min_prime = [0] * (n_max + 1) primes = [] is_prime = [True] * (n_max + 1) is_prime[0], is_prime[1] = False, False for i in range(2, n_max + 1): if is_prime[i]: min_prime[i] = i primes.append(i) j = 0 while j < len(primes) and i * primes[j] <= n_max: p = primes[j] m = i * p is_prime[m] = False if min_prime[m] == 0: min_prime[m] = p if i % p == 0: break j += 1 return min_prime def compute_max_f(X, Y, min_prime): max_f = 0 for R in range(X, Y + 1): if R == 0: continue current = R valid = True product = 1 factors = {} # Factorize R using min_prime array while current != 1: p = min_prime[current] count = 0 while current % p == 0: count += 1 current = current // p if p % 4 == 3: if count % 2 != 0: valid = False break elif p % 4 == 1: product *= (count + 1) if valid: current_f = 4 * product if current_f > max_f: max_f = current_f return max_f def main(): X, Y = map(int, sys.stdin.readline().split()) if X == 0: X = 1 if Y < X: print(0) return max_r = Y if max_r == 0: print(0) return min_prime = euler_sieve(max_r) result = compute_max_f(X, Y, min_prime) print(result) if __name__ == "__main__": main()