mod=10**9+7

n,k=map(int,input().split())

a=list(map(int,input().split()))

if max(a)<0:

  if k%2:a.sort(reverse=1)

  else:a.sort()

  ans=1

  for i in a[:k]:ans=(ans*i)%mod

  exit(print(ans))

if n==k:

  ans=1

  for i in a:ans=(ans*i)%mod

  exit(print(ans))

p=[(0,0)]

m=[(0,0)]

for i in a:

  if i<0:m.append((-i,1))

  else:p.append((i,0))

pp=mm=None

p.sort()

m.sort()

oe=0

ans=1

for i in range(k):

  if p[-1][0]>m[-1][0]:

    t,f=p.pop()

    pp=t

  else:

    t,f=m.pop()

    mm=t

  ans=(ans*t)%mod

  if ans==0:exit(print(0))

  oe^=f

if oe:

  if mm==None:

    ans=(ans*pow(pp,mod-2,mod)*m[-1][0])%mod

  elif pp==None:

    ans=(ans*pow(mm,mod-2,mod)*p[-1][0])%mod

  elif pp*p[-1][0]>mm*m[-1][0]:

    ans=(ans*pow(mm,mod-2,mod)*p[-1][0])%mod

  else:

    ans=(ans*pow(pp,mod-2,mod)*m[-1][0])%mod

print(ans)

from itertools import combinations

mod=10**9+7

def solve(n,k,a):

  if min(a)>0:

    ans=1

    a.sort(reverse=1)

    for i in a[:k]:

      ans*=i

      ans%=mod

    return ans

  if max(a)<0:

    if k%2==0:

      a.sort()

      ans=1

      for i in a[:k]:

        ans*=i

        ans%=mod

      return ans

    else:

      a.sort(reverse=1)

      ans=1

      for i in a[:k]:

        ans*=i

        ans%=mod

      return ans

  if n==k:

    ans=1

    for i in a:

      ans*=i

      ans%=mod

    return ans

  if k==1:

    return max(a)

  if n-k==1:

    ans=1

    if a.count(0)>1:return 0

    p=[]

    m=[]

    for i in a:

      if i>0:p.append(i)

      elif i<0:m.append(i)

    if 0 in a:

      if len(m)%2==0:

        for i in a:

          if i==0:continue

          ans=(ans*i)%mod

      else:ans=0

    else:

      if len(m)%2==0:

        for i in sorted(p)[1:]+m:ans=(ans*i)%mod

      else:

        for i in p+sorted(m)[:-1]:ans=(ans*i)%mod

    return ans





  ans=1

  p=[]

  m=[]

  for i in a:

    if i<0:m.append(i)

    elif i>=0:p.append(i)

  p.sort()

  m.sort(reverse=1)



  while k>1:

    if k<=5:

      if len(p)>=10:p=p[-10:]

      if len(m)>=10:m=m[-10:]

      ans*=solve2(len(p)+len(m),k,m+p)

      ans%=mod

      k=0

      break

    if len(p)<2:

      ans*=m.pop()*m.pop()

      k-=2

    elif len(m)<2:

      ans*=p.pop()*p.pop()

      k-=2

    elif m[-1]*m[-2]>p[-1]*p[-2]:

      ans*=m.pop()*m.pop()

      k-=2

    else:

      ans*=p.pop()*p.pop()

      k-=2

    ans%=mod

  if k:

    ans*=p.pop()

  return ans



def solve2(n,k,a):

  ans=-10**20

  for c in combinations(list(range(n)),k):

    anss=1

    for i in c:anss*=a[i]

    ans=max(ans,anss)

  return ans%mod



n,k=list(map(int,input().split()))

a=list(map(int,input().split()))

print((solve(n,k,a)))

mod = 10**9 + 7
n, k = map(int, input().split())
a = list(map(int, input().split()))
if max(a) < 0:
    if k % 2:
        a.sort(reverse=1)
    else:
        a.sort()
    ans = 1
    for i in a[:k]:
        ans = (ans * i) % mod
    exit(print(ans))
if n == k:
    ans = 1
    for i in a:
        ans = (ans * i) % mod
    exit(print(ans))
p = [(0, 0)]
m = [(0, 0)]
for i in a:
    if i < 0:
        m.append((-i, 1))
    else:
        p.append((i, 0))
pp = mm = None
p.sort()
m.sort()
oe = 0
ans = 1
for i in range(k):
    if p[-1][0] > m[-1][0]:
        t, f = p.pop()
        pp = t
    else:
        t, f = m.pop()
        mm = t
    ans = (ans * t) % mod
    if ans == 0:
        exit(print(0))
    oe ^= f
if oe:
    if mm == None:
        ans = (ans * pow(pp, mod - 2, mod) * m[-1][0]) % mod
    elif pp == None:
        ans = (ans * pow(mm, mod - 2, mod) * p[-1][0]) % mod
    elif pp * p[-1][0] > mm * m[-1][0]:
        ans = (ans * pow(mm, mod - 2, mod) * p[-1][0]) % mod
    else:
        ans = (ans * pow(pp, mod - 2, mod) * m[-1][0]) % mod
print(ans)

from itertools import combinations

mod = 10**9 + 7


def solve(n, k, a):
    if min(a) > 0:
        ans = 1
        a.sort(reverse=1)
        for i in a[:k]:
            ans *= i
            ans %= mod
        return ans
    if max(a) < 0:
        if k % 2 == 0:
            a.sort()
            ans = 1
            for i in a[:k]:
                ans *= i
                ans %= mod
            return ans
        else:
            a.sort(reverse=1)
            ans = 1
            for i in a[:k]:
                ans *= i
                ans %= mod
            return ans
    if n == k:
        ans = 1
        for i in a:
            ans *= i
            ans %= mod
        return ans
    if k == 1:
        return max(a)
    if n - k == 1:
        ans = 1
        if a.count(0) > 1:
            return 0
        p = []
        m = []
        for i in a:
            if i > 0:
                p.append(i)
            elif i < 0:
                m.append(i)
        if 0 in a:
            if len(m) % 2 == 0:
                for i in a:
                    if i == 0:
                        continue
                    ans = (ans * i) % mod
            else:
                ans = 0
        else:
            if len(m) % 2 == 0:
                for i in sorted(p)[1:] + m:
                    ans = (ans * i) % mod
            else:
                for i in p + sorted(m)[:-1]:
                    ans = (ans * i) % mod
        return ans
    ans = 1
    p = []
    m = []
    for i in a:
        if i < 0:
            m.append(i)
        elif i >= 0:
            p.append(i)
    p.sort()
    m.sort(reverse=1)
    while k > 1:
        if k <= 5:
            if len(p) >= 10:
                p = p[-10:]
            if len(m) >= 10:
                m = m[-10:]
            ans *= solve2(len(p) + len(m), k, m + p)
            ans %= mod
            k = 0
            break
        if len(p) < 2:
            ans *= m.pop() * m.pop()
            k -= 2
        elif len(m) < 2:
            ans *= p.pop() * p.pop()
            k -= 2
        elif m[-1] * m[-2] > p[-1] * p[-2]:
            ans *= m.pop() * m.pop()
            k -= 2
        else:
            ans *= p.pop() * p.pop()
            k -= 2
        ans %= mod
    if k:
        ans *= p.pop()
    return ans


def solve2(n, k, a):
    ans = -(10**20)
    for c in combinations(list(range(n)), k):
        anss = 1
        for i in c:
            anss *= a[i]
        ans = max(ans, anss)
    return ans % mod


n, k = list(map(int, input().split()))
a = list(map(int, input().split()))
print((solve(n, k, a)))

+from itertools import combinations + -n, k = map(int, input().split()) + + +def solve(n, k, a): +    if min(a) > 0: +        ans = 1 +        a.sort(reverse=1) +        for i in a[:k]: +            ans *= i +            ans %= mod +        return ans +    if max(a) < 0: +        if k % 2 == 0: +            a.sort() +            ans = 1 +            for i in a[:k]: +                ans *= i +                ans %= mod +            return ans +        else: +            a.sort(reverse=1) +            ans = 1 +            for i in a[:k]: +                ans *= i +                ans %= mod +            return ans +    if n == k: +        ans = 1 +        for i in a: +            ans *= i +            ans %= mod +        return ans +    if k == 1: +        return max(a) +    if n - k == 1: +        ans = 1 +        if a.count(0) > 1: +            return 0 +        p = [] +        m = [] +        for i in a: +            if i > 0: +                p.append(i) +            elif i < 0: +                m.append(i) +        if 0 in a: +            if len(m) % 2 == 0: +                for i in a: +                    if i == 0: +                        continue +                    ans = (ans * i) % mod +            else: +                ans = 0 +        else: +            if len(m) % 2 == 0: +                for i in sorted(p)[1:] + m: +                    ans = (ans * i) % mod +            else: +                for i in p + sorted(m)[:-1]: +                    ans = (ans * i) % mod +        return ans +    ans = 1 +    p = [] +    m = [] +    for i in a: +        if i < 0: +            m.append(i) +        elif i >= 0: +            p.append(i) +    p.sort() +    m.sort(reverse=1) +    while k > 1: +        if k <= 5: +            if len(p) >= 10: +                p = p[-10:] +            if len(m) >= 10: +                m = m[-10:] +            ans *= solve2(len(p) + len(m), k, m + p) +            ans %= mod +            k = 0 +            break +        if len(p) < 2: +            ans *= m.pop() * m.pop() +            k -= 2 +        elif len(m) < 2: +            ans *= p.pop() * p.pop() +            k -= 2 +        elif m[-1] * m[-2] > p[-1] * p[-2]: +            ans *= m.pop() * m.pop() +            k -= 2 +        else: +            ans *= p.pop() * p.pop() +            k -= 2 +        ans %= mod +    if k: +        ans *= p.pop() +    return ans + + +def solve2(n, k, a): +    ans = -(10**20) +    for c in combinations(list(range(n)), k): +        anss = 1 +        for i in c: +            anss *= a[i] +        ans = max(ans, anss) +    return ans % mod + + +n, k = list(map(int, input().split())) -if max(a) < 0: -    if k % 2: -        a.sort(reverse=1) -    else: -        a.sort() -    ans = 1 -    for i in a[:k]: -        ans = (ans * i) % mod -    exit(print(ans)) -if n == k: -    ans = 1 -    for i in a: -        ans = (ans * i) % mod -    exit(print(ans)) -p = [(0, 0)] -m = [(0, 0)] -for i in a: -    if i < 0: -        m.append((-i, 1)) -    else: -        p.append((i, 0)) -pp = mm = None -p.sort() -m.sort() -oe = 0 -ans = 1 -for i in range(k): -    if p[-1][0] > m[-1][0]: -        t, f = p.pop() -        pp = t -    else: -        t, f = m.pop() -        mm = t -    ans = (ans * t) % mod -    if ans == 0: -        exit(print(0)) -    oe ^= f -if oe: -    if mm == None: -        ans = (ans * pow(pp, mod - 2, mod) * m[-1][0]) % mod -    elif pp == None: -        ans = (ans * pow(mm, mod - 2, mod) * p[-1][0]) % mod -    elif pp * p[-1][0] > mm * m[-1][0]: -        ans = (ans * pow(mm, mod - 2, mod) * p[-1][0]) % mod -    else: -        ans = (ans * pow(pp, mod - 2, mod) * m[-1][0]) % mod -print(ans) +print((solve(n, k, a)))