const modulo = 1e9 + 7
var nthMagicalNumber = function(n, a, b) {
const getGcd = (p, q) => {
if (!q) return p
return getGcd(q, p % q)
}
const gcd = getGcd(a, b)
const lcm = a * b / gcd
const m = Math.min(a, b)
const M = Math.max(a, b)
if (M % m === 0) return n * m % modulo
const mMinLcm = (M + m) / gcd - 2
const lcmMod = n % (mMinLcm + 1)
const lcm_in_n = Math.floor(n / (mMinLcm + 1))
if (lcmMod === 0){
return lcm * lcm_in_n % modulo
}
let result = 0
let mi = 0
let Mi = 0
while(mi + Mi < lcmMod){
if((mi + 1) * m < (Mi + 1) * M){
result = (mi + 1) * m
mi++
} else {
result = (Mi + 1) * M
Mi++
}
}
return (result + lcm_in_n * lcm) % modulo
}