Problem:
Score : 300 points

Problem Statement

Takahashi is organizing a party.

At the party, each guest will receive one or more snack pieces.

Takahashi predicts that the number of guests at this party will be A or B.

Find the minimum number of pieces that can be evenly distributed to the guests in both of the cases predicted.

We assume that a piece cannot be divided and distributed to multiple guests.

Constraints

1 \leq A, B \leq 10^5

A \neq B

All values in input are integers.

Input

Input is given from Standard Input in the following format:

A B

Output

Print the minimum number of pieces that can be evenly distributed to the guests in both of the cases with A guests and B guests.

Sample Input 1

2 3

Sample Output 1

6

When we have six snack pieces, each guest can take three pieces if we have two guests, and each guest can take two if we have three guests.

Sample Input 2

123 456

Sample Output 2

18696

Sample Input 3

100000 99999

Sample Output 3

9999900000

Solution in Rust (1.42.0) (judge verdict: Accepted)

fn gcd(a: i64, b: i64) -> i64 {
    let mut larger = std::cmp::max(a, b);
    let mut smaller = std::cmp::min(a, b);
    while smaller != 0 {
        let remainder = larger % smaller;
        larger = smaller;
        smaller = remainder;
    }
    larger
}

fn lcm(a: i64, b: i64) -> i64 {
    let gcd = gcd(a, b);
    gcd * (a/gcd) * (b/gcd)
}

fn main() {
    let mut input_iter = read_line_as_vector::<i64>().into_iter();
    let a = input_iter.next().unwrap();
    let b = input_iter.next().unwrap();
    println!("{}", lcm(a, b));
}

fn read_line_as_vector<T: std::str::FromStr>() -> Vec<T> {
    let mut input = String::new();
    let res = std::io::stdin().read_line(&mut input);
    if let Err(error) = res {
        panic!("io error at stdin.read_line: {}", error);
    };
    match input.trim().split_whitespace().map(|x| x.parse()).collect::<Result<Vec<T>, _>>() {
        Ok(vec) => vec,
        _ => panic!("error while parsing input: {}", input)
    }
}