output_description: No matter how good your plan is, a "dull-year" would eventually come, in which
  the bamboos do not flower in any block. For each dataset, output in a line an
  integer meaning how many years from now the first dull-year comes after the
  first _m_ years.
  
  Note that the input of _m_ = 2 and _n_ = 500,000 (the last dataset of the
  Sample Input) gives the largest answer.
input_description: The input consists of at most 50 datasets, each in the following format.
  
  _m_ _n_  
  
  An integer _m_ (2 ≤ _m_ ≤ 100) represents the lifetime (in years) of the
  bamboos with the shortest lifetime that Dr. ACM can use for gardening. An
  integer _n_ (1 ≤ _n_ ≤ 500,000) represents the number of blocks.
  
  The end of the input is indicated by a line containing two zeros.
attempt: from bisect import bisect_left
  
  
  def rwh_primes2(n):
      # https://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n-in-python/3035188#3035188
      """Input n>=6, Returns a list of primes, 2 <= p < n"""
      correction = n % 6 > 1
      n = {0: n, 1: n - 1, 2: n + 4, 3: n + 3, 4: n + 2, 5: n + 1}[n % 6]
      sieve = [True] * (n // 3)
      sieve[0] = False
      for i in range(int(n**0.5) // 3 + 1):
          if sieve[i]:
              k = 3 * i + 1 | 1
              sieve[((k * k) // 3) :: 2 * k] = [False] * (
                  (n // 6 - (k * k) // 6 - 1) // k + 1
              )
              sieve[(k * k + 4 * k - 2 * k * (i & 1)) // 3 :: 2 * k] = [False] * (
                  (n // 6 - (k * k + 4 * k - 2 * k * (i & 1)) // 6 - 1) // k + 1
              )
      return [2, 3] + [3 * i + 1 | 1 for i in range(1, n // 3 - correction) if sieve[i]]
  
  
  if __name__ == "__main__":
      prime = rwh_primes2(7368791 + 10)
      while True:
          m, n = map(int, input().split())
          if m == 0 and n == 0:
              break
          small_prime = prime[: bisect_left(prime, m**2)]
          composite = []
          for i in range(1, m + 1):
              for j in range(i, m + 1):
                  x = i * j
                  if m <= x <= m**2 and x not in small_prime:
                      for p in small_prime:
                          if x % p == 0:
                              if x < m * p:
                                  composite.append(x)
                              break
          composite = sorted(list(set(composite)))
          pp = bisect_left(prime, m)
          cp = 0
          sz = len(composite)
          for i in range(n + 1):
              if cp < sz:
                  if composite[cp] < prime[pp]:
                      ans = composite[cp]
                      cp += 1
                  else:
                      ans = prime[pp]
                      pp += 1
              else:
                  ans = prime[pp + n - i]
                  break
          print(ans)
  
problem_description: Bamboo Blossoms
  
  The bamboos live for decades, and at the end of their lives, they flower to
  make their seeds. Dr. ACM, a biologist, was fascinated by the bamboos in
  blossom in his travel to Tsukuba. He liked the flower so much that he was
  tempted to make a garden where the bamboos bloom annually. Dr. ACM started
  research of improving breed of the bamboos, and finally, he established a
  method to develop bamboo breeds with controlled lifetimes. With this method,
  he can develop bamboo breeds that flower after arbitrarily specified years.
  
  Let us call bamboos that flower _k_ years after sowing "_k_ -year-bamboos."
  _k_ years after being sowed, _k_ -year-bamboos make their seeds and then die,
  hence their next generation flowers after another _k_ years. In this way, if
  he sows seeds of _k_ -year-bamboos, he can see bamboo blossoms every _k_
  years. For example, assuming that he sows seeds of 15-year-bamboos, he can see
  bamboo blossoms every 15 years; 15 years, 30 years, 45 years, and so on, after
  sowing.
  
  Dr. ACM asked you for designing his garden. His garden is partitioned into
  blocks, in each of which only a single breed of bamboo can grow. Dr. ACM
  requested you to decide which breeds of bamboos should he sow in the blocks in
  order to see bamboo blossoms in at least one block for as many years as
  possible.
  
  You immediately suggested to sow seeds of one-year-bamboos in all blocks. Dr.
  ACM, however, said that it was difficult to develop a bamboo breed with short
  lifetime, and would like a plan using only those breeds with long lifetimes.
  He also said that, although he could wait for some years until he would see
  the first bloom, he would like to see it in every following year. Then, you
  suggested a plan to sow seeds of 10-year-bamboos, for example, in different
  blocks each year, that is, to sow in a block this year and in another block
  next year, and so on, for 10 years. Following this plan, he could see bamboo
  blossoms in one block every year except for the first 10 years. Dr. ACM
  objected again saying he had determined to sow in all blocks this year.
  
  After all, you made up your mind to make a sowing plan where the bamboos bloom
  in at least one block for as many consecutive years as possible after the
  first _m_ years (including this year) under the following conditions:
  
    * the plan should use only those bamboo breeds whose lifetimes are _m_ years or longer, and 
    * Dr. ACM should sow the seeds in all the blocks only this year.
samples: [{"input": "1\n    3 4\n    10 20\n    100 50\n    2 500000\n    0 0", "output": "11\n    47\n    150\n    7368791"}]