Программа работает, решает правильно (сверял ответы с результатами в онлайн-калькуляторах на других сайтах). Почему не принимает - не понятно. Ответ вывожу, как и просит. Советую смотреть эту версию кода, т.к. он с комментами:
public static void main(String[] args) throws Exception {
        BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));

        // Считываем
        int num1 = Integer.parseInt(rd.readLine());
        int num2 = Integer.parseInt(rd.readLine());

        // Если 0 или меньше - выкинуть исключение
        if (num1 <= 0 || num2 <= 0) {
            throw new Exception();
        }

        /**
         * Какая логика метода fillIt - он принимает число и
         * возвращает HashSet с простыми множителями. Пример число 12
         * 12 / 2 = 6
         * 6 / 2 = 3
         * 3 / 3 = 1
         * Он вернет сет с числами 2 и 3
         * Если число простое (может делится только на себя), как
         * к примеру 2147483647 - он добавит в сет 1 и вернет его
         *
         * На выходе получаем - сет с
         */

        Set<Integer> flist = fillIt(num1);
        Set<Integer> slist = fillIt(num2);

        /**
         * Суть giveMeAnswer = принимает 2 сета, и проверяет 2мя циклами
         * каждое число. Если они совпадают - множит их
         */
        int result = giveMeAnswer(flist, slist);

        System.out.println(result);
    }

    static Set<Integer> fillIt(int numb) {
        Set<Integer> set = new HashSet<>();
        int copy = numb;

        // цикл до тех пор, пока число не будет равен 1
        while (!(numb == 1)) {

            /*
            цикл перебора простых чисел, что бы поделить
            без остатка. Пока i меньше (корня из ЧИСЛА + 10)
            (это для простых чисел, если к примеру будет
            число 2147483647 - то он попросут зависнет. В
            чем суть - если ЧИСЛО не делится без остатка
            на 2, 3, 4...  до числа своего корня - оно простое.  )
            */
            for (int i = 2; i < Math.sqrt(copy) + 10; i++) {

                // если число без остатка делится на i
                if (numb % i == 0) {
                    numb /= i;  // число = число / i
                    set.add(i); // добавить i
                    break;      // завершить этот цикл.. если numb = 1 - выйдет, если нет - снова пойдет по этому циклу
                } else if (i > Math.sqrt(copy)) {
                    // вот оно.. если оно не поделилось до своего кореня
                    // - оно простое. Если поделилось - сюда не дойдет.
                    set.add(1);
                    return set;
                }
            }
        }
        return set;
    }

    static int giveMeAnswer(Set<Integer> first, Set<Integer> second) {

        int result = 1;

        // Перебираем первый сет по второму, тут вроде все просто
        for (Integer n1 : first) {
            for (Integer n2 : second) {
                if (n1.equals(n2)) {
                    result = result * n1;
                }
            }
        }
        return result;
    }