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 C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;

namespace AtCoderBeginnerContest148
{
	class Program
	{
		static void Main(string[] args)
		{
			var numbers = Console.ReadLine().Split(' ').Select(x => int.Parse(x));
			var bigNumber = numbers.Max();
			var smallNumber = numbers.Min();

			var primes = PrimeFactors(smallNumber).ToList();

			long result = bigNumber;
			if((result / smallNumber) * smallNumber == bigNumber)
			{
				Console.WriteLine(bigNumber);
				return;
			}

			result = (long)smallNumber * (long)bigNumber;
			for (var i = 0; i < primes.Count; i++)
			{
				var tmp = result / primes[i];
				if(tmp * primes[i] != result)
				{
					continue;
				}

				if((tmp / smallNumber) * smallNumber == tmp)
				{
					result = tmp;
				}
			}
			Console.WriteLine(result);
		}

		public static IEnumerable<int> PrimeFactors(int n)
		{
			int i = 2;
			int tmp = n;

			while (i * i <= n) //※1
			{
				if (tmp % i == 0)
				{
					tmp /= i;
					yield return i;
				}
				else
				{
					i++;
				}
			}
			if (tmp != 1) yield return tmp;//最後の素数も返す
		}
	}
}