import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long a = sc.nextLong(); long b = sc.nextLong(); long c = a + b; HashMap mapX = new HashMap<>(); for (long i = 2; i <= Math.sqrt(c); i++) { while (c % i == 0) { if (mapX.containsKey(i)) { mapX.put(i, mapX.get(i) + 1); } else { mapX.put(i, 1); } c /= i; } } if (c != 1) { if (mapX.containsKey(c)) { mapX.put(c, mapX.get(c) + 1); } else { mapX.put(c, 1); } } HashMap mapY = new HashMap<>(); for (long i = 2; i <= Math.sqrt(a); i++) { while (a % i == 0) { if (mapY.containsKey(i)) { mapY.put(i, mapY.get(i) + 1); } else { mapY.put(i, 1); } a /= i; } } if (a != 1) { if (mapY.containsKey(a)) { mapY.put(a, mapY.get(a) + 1); } else { mapY.put(a, 1); } } for (long i = 2; i <= Math.sqrt(b); i++) { while (b % i == 0) { if (mapY.containsKey(i)) { mapY.put(i, mapY.get(i) + 1); } else { mapY.put(i, 1); } b /= i; } } if (b != 1) { if (mapY.containsKey(b)) { mapY.put(b, mapY.get(b) + 1); } else { mapY.put(b, 1); } } long ans = 1; for (Map.Entry entry : mapX.entrySet()) { if (mapY.containsKey(entry.getKey())) { ans *= (long)(Math.pow(entry.getKey(), Math.min(entry.getValue(), mapY.get(entry.getKey())))); } } System.out.println(ans); } }