/* GCC */

#include <stdio.h>
#include <algorithm>

using namespace std;

// Повертає показник найбільшого степеня числа divisor, на який ділиться число n.
// Паралельно ділить число n на цей степінь.
inline int getPowerAndDivide(int &n, int divisor)
{
    int power = 0;
    while (n % divisor == 0)
    {
        power++;
        n /= divisor;
    }
    return power;
}

// Перевіряє, чи три заданих числа утворюють дружню трійку, ігноруючи те, чи вони різні.
inline bool check(int a, int b, int c)
{
    return a * b % c == 0 && a * c % b == 0 && b * c % a == 0;
}

int main()
{
    freopen("numbers.in", "r", stdin);
    freopen("numbers.out", "w", stdout);

    int a, b;
    scanf("%d %d", &a, &b);

    int ans = 1;

    int m = min(a, b), curA = a, curB = b;
    for (int divisor = 2; divisor <= m; divisor++)
    {
        int powerA = getPowerAndDivide(curA, divisor);
        int powerB = getPowerAndDivide(curB, divisor);
        // Якщо принаймні одне з чисел powerA та powerB виявилося ненульовим,
        // то поточний дільник (divisor) є за побудовою алгоритму простим числом.
        ans *= (powerA + powerB) - abs(powerA - powerB) + 1;
    }

    // Поправка на те, що жодні два числа не повинні збігатися:
    if (check(a, a, b))
        ans--;
    if (check(a, b, b))
        ans--;

    printf("%d\n", ans);

    return 0;
}
