N, K = map(int, input().split())
A = list(map(int, input().split()))

mod = 10 ** 9 + 7
plus = []
zero = []
minus = []
ans = 1

for k in range(N):
  if A[k] > 0:
    plus.append(A[k])
  elif A[k] < 0:
    minus.append(-1 * A[k])
  else:
    zero.append(A[k])
plus.sort(reverse = True)
minus.sort(reverse = True)
lp = len(plus)
lm = len(minus)

if lp == 0 and K % 2 == 1:
  for k in range(K):
    ans = ans * minus[- k - 1] % mod
  ans = -1 * ans % mod  
  print(ans)
  exit()
if lp == 0 and K % 2 == 0:
  for k in range(K):
    ans = ans * minus[k] % mod
  print(ans)
  exit()
if lm == 0:
  for k in range(K):
    ans = ans * plus[k] % mod
  print(ans)
  exit()
if len(zero) + K > N:
  print(0)
  exit()

p = 0
m = 0
for k in range(K):
  if plus[p] >= minus[m]:
    p += 1
    if p == lp:
      m = K - p  
      break
  else:
    m += 1
    if m == lm:
      p = K - m
      break

def main(mp, mm, plus, minus, mod, K):
  p = 0
  m = 0
  ans = 1
  for k in range(K):
    if plus[p] >= minus[m]:
      ans = ans * plus[p] % mod
      p += 1
      if p == mp:
        for j in range(K - p - m):
          ans = ans * minus[m + j] % mod
        break
    else:
      ans = ans * minus[m] % mod
      m += 1
      if m == mm:
        for j in range(K - p - m):
          ans = ans * plus[p + j] % mod
        break  
  print(ans)
  exit()

if m%2 == 0:
  main(lp, lm, plus, minus, mod, K)
else:
  if p == lp:
    if m != lm:
      main(lp-1, lm, plus, minus, mod, K)
    else:
      if len(zero) > 0:
        print(0)
        exit()
      else:
        main(lp, lm, plus, minus, mod, K)
  elif m == lm:
    main(lp, lm-1, plus, minus, mod, K)
  elif p == 0:
    main(lp, lm-1, plus, minus, mod, K)
  else:
    if plus[p] * plus[p-1] > minus[m-1] * minus[m]:
      main(lp, lm-1, plus, minus, mod, K)
    else:
      main(lp-1, lm, plus, minus, mod, K)

### FIXED CODE ###

N, K = map(int, input().split())
A = list(map(int, input().split()))

mod = 10 ** 9 + 7
plus = []
zero = []
minus = []
ans = 1

for k in range(N):
  if A[k] > 0:
    plus.append(A[k])
  elif A[k] < 0:
    minus.append(-1 * A[k])
  else:
    zero.append(A[k])
plus.sort(reverse = True)
minus.sort(reverse = True)
lp = len(plus)
lm = len(minus)

if len(zero) + K > N:
  print(0)
  exit()
elif lp == 0: 
  if K % 2 == 1:
    if len(zero) > 0:
      print(0)
      exit()
    else:
      for k in range(K):
        ans = ans * (-1) * minus[- k - 1] % mod  
      print(ans)
      exit()
  else:
    for k in range(K):
      ans = ans * (-1) * minus[k] % mod
    print(ans)
    exit()
elif lm == 0:
  for k in range(K):
    ans = ans * plus[k] % mod
  print(ans)
  exit()

p = 0
m = 0
for k in range(K):
  if plus[p] >= minus[m]:
    p += 1
    if p == lp:
      m = K - p  
      break
  else:
    m += 1
    if m == lm:
      p = K - m
      break

def main(mp, mm, plus, minus, mod, K):
  ans = 1
  for k in range(mp):
    ans = ans * plus[k] % mod
  for k in range(mm):
    ans = ans * (-1) * minus[k] % mod
  print(ans)
  exit()

if m%2 == 0:
  main(p, m, plus, minus, mod, K)
else:
  if p == lp:
    if m != lm:
      main(p - 1, m + 1, plus, minus, mod, K)
    else:
      if len(zero) > 0:
        print(0)
        exit()
      else:
        main(p, m, plus, minus, mod, K)
  elif m == lm:
    main(p + 1, m - 1, plus, minus, mod, K)
  elif p == 0:
    main(p + 1, m - 1, plus, minus, mod, K)
  else:
    if plus[p] * plus[p - 1] > minus[m - 1] * minus[m]:
      main(p + 1, m - 1, plus, minus, mod, K)
    else:
      main(p - 1, m + 1, plus, minus, mod, K)