/*=============================================================================================================================/*
                                               Bismillahir Rahmanir Rahim

      _     ____  ___  ____   _   _  _         ___  ____   _         _     __  __
     / \   / ___||_ _|| __ ) | | | || |       |_ _|/ ___| | |       / \   |  \/  |
    / _ \  \___ \ | | |  _ \ | | | || |        | | \___ \ | |      / _ \  | |\/| |
   / ___ \  ___) || | | |_) || |_| || |___     | |  ___) || |___  / ___ \ | |  | |
  /_/   \_\|____/|___||____/  \___/ |_____|   |___||____/ |_____|/_/   \_\|_|  |_|

   _   __           __  __  __
  |_) (_  _  o__   /   (_  |_
  |_)o__)(_  || |  \__ __) |__

    ___                    _   _      _                _ _               __   ___                 _         _        _
   / __|_ _ ___ ___ _ _   | | | |_ _ (_)_ _____ _ _ __(_) |_ _  _   ___ / _| | _ ) __ _ _ _  __ _| |__ _ __| |___ __| |_
  | (_ | '_/ -_) -_) ' \  | |_| | ' \| \ V / -_) '_(_-< |  _| || | / _ \  _| | _ \/ _` | ' \/ _` | / _` / _` / -_|_-< ' \
   \___|_| \___\___|_||_|  \___/|_||_|_|\_/\___|_| /__/_|\__|\_, | \___/_|   |___/\__,_|_||_\__, |_\__,_\__,_\___/__/_||_|
                                                            |__/                           |___/


   FB: https://facebook.com/SIAsibul
   Gmail: asibulislam8@gmail.com

/*=============================================================================================================================*/

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ll, int> pli;
typedef pair<int, ll> pil;
typedef vector<pii> vii;
typedef vector<pil> vil;
typedef vector<pli> vli;
typedef vector<pll> vll;

#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define sz size()
#define all(a)  a.begin(), a.end()
#define mem(a, b)     memset(a, b, sizeof(a))
#define f0(i,n) for(ll i=0;i<(n);i++)
#define f1(i,n) for(ll i=1;i<=(n);i++)
#define f2(i,a,n) for(ll i=(a);i<=(n);i++)
#define fr(i,n,a) for(ll i=(n);i>=(a);i--)
#define rep(i,a,b,c) for(ll i=(a);i!=(b);i+=(c))
#define nl "\n"


const int INF = 1e9 + 5;
const int MXN = 2e5 + 5;
const int MOD = 1e9 + 7;

ll mod(ll x){
    return (x%MOD + MOD)%MOD;
}
ll mul(ll a , ll b){
    return mod(mod(a)*mod(b));
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cout<<fixed;
    cout<<setprecision(10);

    int n, k; cin >> n >> k;
    vl pos, neg;

    f0(i, n){
        ll x; cin >> x;
        if(x > 0) pos.pb(x);
        else neg.pb(x);
    }

    ll ans = 1;
/*
    if((int)pos.size()){
        if(k%2){
            sort(pos.begin(),pos.end());
            ans=mul(ans,pos.back());
            pos.pop_back();
            --k;
        }
        vector<ll>ok;
        sort(pos.begin(),pos.end(),greater<>());
        sort(neg.begin(),neg.end());
        for(int i=0;i+1<(int)pos.size();i+=2)
            ok.push_back(pos[i]*pos[i+1]);
        for(int i=0;i+1<(int)neg.size();i+=2)
            ok.push_back(neg[i]*neg[i+1]);
        if((int)pos.size()%2 && (int)neg.size()%2)
            ok.push_back(pos.back()*neg.back());
        sort(ok.begin(),ok.end(),greater<>());
        for(int i=0;i<(k/2);i++)
            ans=mul(ans,ok[i]);
        cout<<ans;
    }
 */
    if((int)pos.size()){
        if(k%2){
            sort(pos.begin(),pos.end());
            ans=mul(ans,pos.back());
            pos.pop_back();
            --k;
        }

        vl ok;
        sort(all(neg));
        sort(all(pos), greater<ll>());
        for(int i=0;i+1<(int)pos.size();i+=2)
            ok.push_back(pos[i]*pos[i+1]);
        for(int i=0;i+1<(int)neg.size();i+=2)
            ok.push_back(neg[i]*neg[i+1]);

        if((int)pos.size()%2 && (int)neg.size()%2)ok.pb(pos.back()*neg.back());

        sort(all(ok), greater<ll>());

        f0(i, k/2) ans = mul(ans, ok[i]);
        cout << ans << nl;

    }else{
        sort(all(neg));
        if(k%2) reverse(all(neg));
        f0(i, k) ans = mul(ans, neg[i]);
        cout << ans << nl;
    }
    return 0;
 }


Measured memory_bytes: 6600