import Foundation
#if CUDA
extension String {
    func at(i: Int) -> String {
        return String(self[self.index(self.startIndex, offsetBy: i)])
    }
    var length: Int {
        return self.count
    }
}
func getInt() -> Int {
    return Int(readLine()!)!
}
func getStrings() -> [String] {
    return readLine()!.components(separatedBy: " ")
}
func getInts() -> [Int] {
    return getStrings().map({Int($0)!})
}
#else
import Foundation
extension String: CollectionType {
    func at(i: Int) -> String {
        return String(self[self.startIndex.advancedBy(i)])
    }
    var length: Int {
        return self.characters.count
    }
    func splitToArrayOfInt() -> [Int] {
        return self.characters.flatMap({Int(String($0))})
    }
}
func getInt() -> Int {
    return Int(readLine()!)!
}
func getStrings() -> [String] {
    return readLine()!.split(" ")
}
func getInts() -> [Int] {
    return getStrings().map({Int($0)!})
}
#endif

func gcd ( x: Int, y: Int ) -> Int {
    return y == 0 ? x : gcd ( x: y, y: x%y )
}

func main ( ) {
    let a = getInts()
    print(a[0]/gcd(x: a[0], y: a[1])*a[1])

}

main()