/*		Author : Kaustubh Gangwar
		||S||A||M||R||A||T||
*/
#include <bits/stdc++.h>
using namespace std;
#define ld long double
#define pb push_back
#define gcd __gcd
#define vii vector<int>
#define vll vector<long long>
#define all(x) x.begin(),x.end()
#define f(i,a,b) for(int i=a;i<b;i++)
#define fe(i,a,b) for(int i=a;i<=b;i++)
#define nl '\n'
typedef long long  ll;
typedef pair<int,int> pii;
ll mod=1000000007;
ll bpow(ll a, ll b) {
	a=a; ll res = 1;
    while(b){
        if (b & 1)
        res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}

int32_t main()
{	ios_base::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	ll test=1;
	//cin>>test;
	while(test--)
	{
		
        long long n,k;
        cin>>n>>k;
        long long arr[n+1];
        bool all_neg=true;
        long long ans=1;
        for(long long i=0;i<n;i++)
            {
                cin>>arr[i];
                if(arr[i]>0)
                    all_neg=false;
            }
        sort(arr,arr+n);
        if(all_neg==true)
        {
            if(k%2==0)
            {
                for(long long i=0;i<k;i++)
                {
                   long long p=arr[i];
                   long long temp1=ans;
                           temp1=temp1%mod;
                            if(temp1<0)
                            temp1+=mod;
                        long long temp2=p%mod;
                        if(temp2<0)
                        temp2+=mod;
                    long long temp3=(temp1%mod*temp2%mod)%mod;
                    if(temp3<0)
                        temp3+=mod;
                        ans=temp3;
                }
            }
            else
            {
                for(long long i=n-1;i>=n-k;i--)
                {
                    long long p=arr[i];
                    long long temp1=ans;
                           temp1=temp1%mod;
                            if(temp1<0)
                            temp1+=mod;
                        long long temp2=p%mod;
                        if(temp2<0)
                        temp2+=mod;
                    long long temp3=(temp1%mod*temp2%mod)%mod;
                    if(temp3<0)
                        temp3+=mod;
                        ans=temp3;
                }
            }
        }
        else
        {
            long long left=0;
            long long right=n-1;
            long long temp=k;
            while(temp>0)
            {
                if(temp%2==0)
                {
                    if(arr[right]*arr[right-1]>arr[left]*arr[left+1])
                    {
                        long long p=arr[right]*arr[right-1];
                            long long temp1=ans;
                           temp1=temp1%mod;
                            if(temp1<0)
                            temp1+=mod;
                        long long temp2=p%mod;
                        if(temp2<0)
                        temp2+=mod;
                    long long temp3=(temp1%mod*temp2%mod)%mod;
                    if(temp3<0)
                        temp3+=mod;
                        ans=temp3;
                    right-=2;
                    temp-=2;
                    }
                    else
                    {
                        long long p=arr[left]*arr[left+1];
                           long long temp1=ans;
                           temp1=temp1%mod;
                            if(temp1<0)
                            temp1+=mod;
                        long long temp2=p%mod;
                        if(temp2<0)
                        temp2+=mod;
                    long long temp3=(temp1%mod*temp2%mod)%mod;
                    if(temp3<0)
                        temp3+=mod;
                        ans=temp3;
                    left+=2;
                    temp-=2;
                    }
                }
                else
                {
                    long long p=arr[right];
                        long long temp1=ans%mod;
                    if(temp1<0)
                        temp1+=mod;
                    if(p<0)
                        p+=mod;
                    long long temp2=(temp1%mod*p%mod)%mod;
                    if(temp2<0)
                        temp2+=mod;
                        ans=temp2;
                    right-=1;
                    temp-=1;
                }
            }
        }
        cout<<ans<<"\n";
		
	}
return 0;
}


Measured memory_bytes: 5224