output_description: Print the answer.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N K
      A_1 A_2 \dots A_N
attempt: n, k = map(int, input().split())
  a = list(map(int, input().split()))
  # b1,b3はそれぞれ絶対値の大きい順に並ぶ
  b1 = sorted([i for i in a if i < 0])
  l1 = len(b1)
  b2 = sorted([i for i in a if i == 0])
  l2 = len(b2)
  b3 = sorted([i for i in a if i > 0], reverse=True)
  l3 = len(b3)
  
  
  def countk1(x, b11, b13):  # x以下になるものの個数
      ret = 0
      for i in range(l1):
          lx, rx = 0, l3 - 1
          while lx + 1 < rx:
              if b13[(lx + rx) // 2] * b11[i] <= x:
                  lx = (lx + rx) // 2
              else:
                  rx = (lx + rx) // 2
          if b13[rx] * b11[i] <= x:
              ret += rx + 1
          elif b13[lx] * b11[i] <= x:
              ret += lx + 1
      return ret
  
  
  def countk2(x, b21, b23):
      # ここ数えすぎ
      ret = 0
      for i in range(l1 - 1):
          lx, rx = i + 1, l1 - 1
          while lx + 1 < rx:
              if b21[(lx + rx) // 2] * b21[i] <= x:
                  lx = (lx + rx) // 2
              else:
                  rx = (lx + rx) // 2
          if b21[rx] * b21[i] <= x:
              ret += rx - i
          elif b21[lx] * b21[i] <= x:
              ret += lx - i
      for i in range(l3 - 1):
          lx, rx = i + 1, l3 - 1
          while lx + 1 < rx:
              if b23[(lx + rx) // 2] * b23[i] <= x:
                  lx = (lx + rx) // 2
              else:
                  rx = (lx + rx) // 2
          if b23[rx] * b23[i] <= x:
              ret += rx - i
          elif b23[lx] * b23[i] <= x:
              ret += lx - i
      return ret
  
  
  if k <= l1 * l3:
      l, r = b1[0] * b3[-1], -1
      while l + 1 < r:
          if countk1((l + r) // 2, b1, b3) >= k:  # k以上、数が存在するかどうか
              r = (l + r) // 2
          else:
              l = (l + r) // 2
      if countk1(l, b1, b3) == k:
          print(l)
      else:
          print(r)
  elif k <= l1 * l3 + l2 * (l1 + l3) + (l2 * (l2 - 1)) // 2:
      print(0)
  else:
      k -= l1 * l3 + l2 * (l1 + l3) + (l2 * (l2 - 1)) // 2
      l = 1
      if l1 >= 2 and l3 < 2:
          r = b1[0] * b1[1]
      elif l1 < 2 and l3 >= 2:
          r = b3[0] * b3[1]
      else:
          r = max(b1[0] * b1[1], b3[0] * b3[1])
      while l + 1 < r:
          if (
              countk2((l + r) // 2, sorted(b1, reverse=True), sorted(b3)) >= k
          ):  # k以上、数が存在するかどうか
              r = (l + r) // 2
          else:
              l = (l + r) // 2
      if countk2(l, sorted(b1, reverse=True), sorted(b3)) == k:
          print(l)
      else:
          print(r)
  
problem_description: Statement
  
  We have N integers A_1, A_2, ..., A_N.
  
  There are \frac{N(N-1)}{2} ways to choose two of them and form a pair. If we
  compute the product of each of those pairs and sort the results in ascending
  order, what will be the K-th number in that list?
samples: [{"input": "4 3\n    3 3 -4 -2", "output": "-6\n    \n\nThere are six ways to form a pair. The products of those pairs are 9, -12, -6,\n-12, -6, 8.\n\nSorting those numbers in ascending order, we have -12, -12, -6, -6, 8, 9. The\nthird number in this list is -6.\n\n* * *"}, {"input": "10 40\n    5 4 3 2 -1 0 0 0 0 0", "output": "6\n    \n\n* * *"}, {"input": "30 413\n    -170202098 -268409015 537203564 983211703 21608710 -443999067 -937727165 -97596546 -372334013 398994917 -972141167 798607104 -949068442 -959948616 37909651 0 886627544 -20098238 0 -948955241 0 -214720580 277222296 -18897162 834475626 0 -425610555 110117526 663621752 0", "output": "448283280358331064"}]