import math

import fractions

import collections

import itertools

import pprint

from collections import deque

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

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

plist=[]

mlist=[]

ans=1

p=10**9+7

for i in range(N):

    if A[i]>=0:

        plist.append(A[i])

    else:

        mlist.append(A[i])

if len(plist)==0:

    if K%2==1:

        A.sort(reverse=True)

    else:

        A.sort()

    for i in range(K):

        ans=(ans*A[i])%p

    print((ans%p))

elif len(plist)==1:

    #print(plist,mlist)

    mlist.sort()

    if K%2==1:

        ans=plist[0]

    for i in range(K-1):

        ans=(ans*mlist[i])%p

    print((ans%p))

else:

    ans=1

    plist.sort(reverse=True)

    mlist.sort()

    pmap=deque()

    mmap=deque()

    if K%2==1:

        ans=plist[0]%p

        plist.pop(0)

        K=K-1

    #print(plist,mlist)

    for i in range(0,len(plist)-1,2):

        pmap.append(plist[i]*plist[i+1])

    if len(plist)>0:

        pres=plist[len(plist)-1]

    if len(mlist)>0:

        mres=mlist[len(mlist)-1]

    for i in range(0,len(mlist)-1,2):

        mmap.append(mlist[i]*mlist[i+1])

    #print(K)

    mapnum=K//2

    #print(mapnum)

    #print(pmap,mmap,ans)

    for i in range(mapnum):

        if (len(pmap)>0)and(len(mmap)>0):

            pl=pmap.popleft()

            mi=mmap.popleft()

            if pl>mi:

                ans=(ans*pl)%p

                mmap.appendleft(mi)

            else:

                ans=(ans*mi)%p

                pmap.appendleft(pl)

        elif (len(pmap)==0)and(len(mmap)>0):

            mi=mmap.popleft()

            ans = (ans *mi) % p

        elif (len(mmap)==0)and(len(pmap)>0):

            pl=pmap.popleft()

            ans = (ans *pl) % p

        else:

            ans=(ans*pres*mres)%p

    print(ans)



import math

import fractions

import collections

import itertools

import pprint

from collections import deque

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

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

plist=[]

mlist=[]

ans=1

p=10**9+7

for i in range(N):

    if A[i]>=0:

        plist.append(A[i])

    else:

        mlist.append(A[i])

if len(plist)==0:

    if K%2==1:

        A.sort(reverse=True)

    else:

        A.sort()

    for i in range(K):

        ans=(ans*A[i])%p

    print((ans%p))



else:

    ans=1

    plist.sort(reverse=True)

    mlist.sort()

    pmap=deque()

    mmap=deque()

    if K%2==1:

        ans=plist[0]%p

        plist.pop(0)

        K=K-1

    #print(plist,mlist)

    for i in range(0,len(plist)-1,2):

        pmap.append(plist[i]*plist[i+1])

    if len(plist)>0:

        pres=plist[len(plist)-1]

    if len(mlist)>0:

        mres=mlist[len(mlist)-1]

    for i in range(0,len(mlist)-1,2):

        mmap.append(mlist[i]*mlist[i+1])

    #print(K)

    mapnum=K//2

    #print(mapnum)

    #print(pmap,mmap,ans)

    for i in range(mapnum):

        if (len(pmap)>0)and(len(mmap)>0):

            pl=pmap.popleft()

            mi=mmap.popleft()

            if pl>mi:

                ans=(ans*pl)%p

                mmap.appendleft(mi)

            else:

                ans=(ans*mi)%p

                pmap.appendleft(pl)

        elif (len(pmap)==0)and(len(mmap)>0):

            mi=mmap.popleft()

            ans = (ans *mi) % p

        elif (len(mmap)==0)and(len(pmap)>0):

            pl=pmap.popleft()

            ans = (ans *pl) % p

        else:

            ans=(ans*pres*mres)%p

    print(ans)



import math
import fractions
import collections
import itertools
import pprint
from collections import deque

N, K = list(map(int, input().split()))
A = list(map(int, input().split()))
plist = []
mlist = []
ans = 1
p = 10**9 + 7
for i in range(N):
    if A[i] >= 0:
        plist.append(A[i])
    else:
        mlist.append(A[i])
if len(plist) == 0:
    if K % 2 == 1:
        A.sort(reverse=True)
    else:
        A.sort()
    for i in range(K):
        ans = (ans * A[i]) % p
    print((ans % p))
elif len(plist) == 1:
    # print(plist,mlist)
    mlist.sort()
    if K % 2 == 1:
        ans = plist[0]
    for i in range(K - 1):
        ans = (ans * mlist[i]) % p
    print((ans % p))
else:
    ans = 1
    plist.sort(reverse=True)
    mlist.sort()
    pmap = deque()
    mmap = deque()
    if K % 2 == 1:
        ans = plist[0] % p
        plist.pop(0)
        K = K - 1
    # print(plist,mlist)
    for i in range(0, len(plist) - 1, 2):
        pmap.append(plist[i] * plist[i + 1])
    if len(plist) > 0:
        pres = plist[len(plist) - 1]
    if len(mlist) > 0:
        mres = mlist[len(mlist) - 1]
    for i in range(0, len(mlist) - 1, 2):
        mmap.append(mlist[i] * mlist[i + 1])
    # print(K)
    mapnum = K // 2
    # print(mapnum)
    # print(pmap,mmap,ans)
    for i in range(mapnum):
        if (len(pmap) > 0) and (len(mmap) > 0):
            pl = pmap.popleft()
            mi = mmap.popleft()
            if pl > mi:
                ans = (ans * pl) % p
                mmap.appendleft(mi)
            else:
                ans = (ans * mi) % p
                pmap.appendleft(pl)
        elif (len(pmap) == 0) and (len(mmap) > 0):
            mi = mmap.popleft()
            ans = (ans * mi) % p
        elif (len(mmap) == 0) and (len(pmap) > 0):
            pl = pmap.popleft()
            ans = (ans * pl) % p
        else:
            ans = (ans * pres * mres) % p
    print(ans)

import math
import fractions
import collections
import itertools
import pprint
from collections import deque

N, K = list(map(int, input().split()))
A = list(map(int, input().split()))
plist = []
mlist = []
ans = 1
p = 10**9 + 7
for i in range(N):
    if A[i] >= 0:
        plist.append(A[i])
    else:
        mlist.append(A[i])
if len(plist) == 0:
    if K % 2 == 1:
        A.sort(reverse=True)
    else:
        A.sort()
    for i in range(K):
        ans = (ans * A[i]) % p
    print((ans % p))
else:
    ans = 1
    plist.sort(reverse=True)
    mlist.sort()
    pmap = deque()
    mmap = deque()
    if K % 2 == 1:
        ans = plist[0] % p
        plist.pop(0)
        K = K - 1
    # print(plist,mlist)
    for i in range(0, len(plist) - 1, 2):
        pmap.append(plist[i] * plist[i + 1])
    if len(plist) > 0:
        pres = plist[len(plist) - 1]
    if len(mlist) > 0:
        mres = mlist[len(mlist) - 1]
    for i in range(0, len(mlist) - 1, 2):
        mmap.append(mlist[i] * mlist[i + 1])
    # print(K)
    mapnum = K // 2
    # print(mapnum)
    # print(pmap,mmap,ans)
    for i in range(mapnum):
        if (len(pmap) > 0) and (len(mmap) > 0):
            pl = pmap.popleft()
            mi = mmap.popleft()
            if pl > mi:
                ans = (ans * pl) % p
                mmap.appendleft(mi)
            else:
                ans = (ans * mi) % p
                pmap.appendleft(pl)
        elif (len(pmap) == 0) and (len(mmap) > 0):
            mi = mmap.popleft()
            ans = (ans * mi) % p
        elif (len(mmap) == 0) and (len(pmap) > 0):
            pl = pmap.popleft()
            ans = (ans * pl) % p
        else:
            ans = (ans * pres * mres) % p
    print(ans)

-    print((ans % p)) -elif len(plist) == 1: -    # print(plist,mlist) -    mlist.sort() -    if K % 2 == 1: -        ans = plist[0] -    for i in range(K - 1): -        ans = (ans * mlist[i]) % p