N,K=map(int,input().split())
A=list(map(int,input().split()))
mod=10**9+7

if N==K:
    ans=1
    for i in range(N):
        ans=(ans*A[i])%mod
    print(ans%mod)
else:
    neg=[]
    posi=[]
    zero=0
    for i in range(N):
        if A[i]>0:
            posi.append(A[i])
        elif A[i]<0:
            neg.append(-A[i])
        else:
            zero+=1
    if K>N-zero:
        print(0)
    elif len(neg)==N and K%2==1:
        neg.sort()
        ans=1
        for i in range(K):
            ans=(-ans*neg[i])%mod
        print(ans%mod)
    else:
        A.sort(key=lambda x:-abs(x))
        temp=A[:K]
        rest=A[K:]
        check=0
        for i in range(K):
            if temp[i]<0:
                check+=1
        if check%2==0:
            ans=1
            for i in range(K):
                ans=(ans*abs(temp[i]))%mod
            print(ans%mod)
        else:
            rest.sort()
            temp.sort()
            if rest[0]==0 and rest[-1]==0:
                print(0)
            else:
                if check!=K and check!=0:
                    #neg->posi
                    val1=-1
                    val2=-1
                    for i in range(K-1):
                        if temp[i]<0 and temp[i+1]>0:
                            val1=temp[i]
                            val2=temp[i+1]
                            break
                    #(abs(val1),rest[-1])
                    #posi->neg
                    #(abs(val2),abs(rest[0]))
                    if rest[-1]>=0 and rest[0]<0:
                        if abs(rest[-1])*abs(val2)>abs(rest[0])*abs(val1):
                            ans=1
                            for i in range(K):
                                ans=(ans*abs(temp[i]))%mod
                            ans=(ans*abs(rest[-1]))%mod
                            ans=(ans*pow(abs(val1),mod-2,mod))%mod
                            print(ans%mod)
                        else:
                            ans=1
                            for i in range(K):
                                ans=(ans*abs(temp[i]))%mod
                            ans=(ans*abs(rest[0]))%mod
                            ans=(ans*pow(abs(val2),mod-2,mod))%mod
                            print(ans%mod)
                    elif rest[-1]<0:
                        ans=1
                        for i in range(K):
                            ans=(ans*abs(temp[i]))%mod
                        ans=(ans*abs(rest[0]))%mod
                        ans=(ans*pow(abs(val2),mod-2,mod))%mod
                        print(ans%mod)
                    else:
                        ans=1
                        for i in range(K):
                            ans=(ans*abs(temp[i]))%mod
                        ans=(ans*abs(rest[-1]))%mod
                        ans=(ans*pow(abs(val1),mod-2,mod))%mod
                        print(ans%mod)
                elif check==K:
                    val1=abs(temp[-1])
                    ans=1
                    for i in range(K):
                        ans=(ans*abs(temp[i]))%mod
                    ans=(ans*abs(rest[-1]))%mod
                    ans=(ans*pow(abs(val1),mod-2,mod))%mod
                    print(ans%mod)
                else:
                    val2=abs(temp[0])
                    ans=1
                    for i in range(K):
                        ans=(ans*abs(temp[i]))%mod
                    ans=(ans*abs(rest[0]))%mod
                    ans=(ans*pow(abs(val2),mod-2,mod))%mod
                    print(ans%mod)

Measured memory_bytes: 113116