#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
#include <cmath>
#include <set>
#include <stack>
#include <queue>
#include <numeric>
#include <deque>
#include <cstring>
#include <iterator>
#include <map>
#include <cstdlib>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <complex>
#include <bitset>
#include <chrono>
#include <random>

using namespace std;

#define pb push_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define eb emplace_back
#define el '\n'
typedef  long long  ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
typedef vector<ll> vll;
typedef vector<int> vi;
typedef vector<pii> vpi;
typedef vector<pll> vpll;
typedef vector<vi> vvi;
typedef vector<vll> vvll;
typedef vector<bool> vb;
typedef vector<string> vs;

ll inf=(ll)2e18;
const int mod=1000000007;
//const int mod=998244353;
int n,m;



ll inv(ll a,ll m){
    ll b=m-2; a %= m;
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a % m;
        a = a * a % m;
        b >>= 1;
    }
    return res;
}




int main()
{   ios_base::sync_with_stdio(false);cin.tie(NULL);
    int q,t,k,u,v;
    ll x,a,b,c,d,y,l,p;
    cin >> n >> k;
    vll pos,neg;
    c=1;
    for(int i=0; i<n; i++){
        cin >> a;
        c*=a;
        c%=mod;
        if(a<0)
            neg.pb(a);
        else
            pos.pb(a);
    }
    if(n==k){
        cout << (c+mod)%mod << el;
        return 0;
    }
    sort(all(neg),greater<ll>());
    sort(all(pos));
    if(pos.empty()){
        if(k&1){
            a=1;
            for(int i=0; i<k; i++){
                a*=neg[i];
                a%=mod;
            }
            cout << (a+mod)%mod << el;
        }
        else{
            a=1;
            for(int i=0; i<k; i++){
                a*=neg.back();
                neg.pop_back();
                a%=mod;
            }
            cout << (a+mod)%mod << el;
        }
    }
    else{
        p=1;
        for(ll & i: neg){
            i=abs(i);
        }
        u=0;
        a=-1;
        b=-1;
        for(int i=0; i<k; i++){
            if(!pos.empty()&&!neg.empty()){
                if(pos.back()>=neg.back()){
                    p*=pos.back();
                    p%=mod;
                    a=pos.back();
                    pos.pop_back();
                }
                else{
                    p*=neg.back();
                    p%=mod;
                    b=neg.back();
                    neg.pop_back();
                    u++;
                }
            }
            else if(pos.empty()){
                p*=neg.back();
                p%=mod;
                b=neg.back();
                neg.pop_back();
                u++;
            }
            else{
                p*=pos.back();
                p%=mod;
                a=pos.back();
                pos.pop_back();

            }
        }
        if(u&1){
            if(a==-1){
                p*=inv(b,mod);
                p%=mod;
                p*=pos.back();
                p%=mod;
            }
            else{
                p*=inv(b,mod);
                p%=mod;
                p*=inv(a,mod);
                p%=mod;
                if(pos.empty()){
                    p*=b;
                    p%=mod;
                    p*=neg.back();
                    p%=mod;
                }
                else if(neg.empty()){
                    p*=a;
                    p%=mod;
                    p*=pos.back();
                    p%=mod;
                }
                else{
                    if(b*neg.back()>=a*pos.back()){
                        p*=b;
                        p%=mod;
                        p*=neg.back();
                        p%=mod;
                    }
                    else{
                        p*=a;
                        p%=mod;
                        p*=pos.back();
                        p%=mod;
                    }
                }
            }
            cout << p << el;
        }
        else{
            cout << p << el;
        }
    }
    return 0;
}


Measured memory_bytes: 5540