#include <bits/stdc++.h>
 
const double pi = 3.141592653589793238462643383279;
using namespace std;
//typedef
//------------------------------------------
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
typedef pair<int, int> PII;
typedef pair<long long, long long> PLL;
typedef pair<int, PII> TIII;
typedef long long LL;
typedef unsigned long long ULL;
typedef vector<LL> VLL;
typedef vector<VLL> VVLL;
 
 
//container util
//------------------------------------------
#define ALL(a)  (a).begin(),(a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define MP make_pair
#define SZ(a) int((a).size())
#define SQ(a) ((a)*(a))
#define EACH(i,c) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); ++i)
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define SORT(c) sort((c).begin(),(c).end())
 
 
//repetition
//------------------------------------------
#define FOR(i,s,n) for(int i=s;i<(int)n;++i)
#define REP(i,n) FOR(i,0,n)
#define MOD 1000000007
 
 
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define trav(a, x) for(auto& a : x)
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()
 
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const double EPS = 1E-10;
 
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)


//ここから編集

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

  int N, K;
  cin >> N >> K;

  vector<ll> A(N);
  vector<ll> s, h, z;
  REP(i,N){
    cin >> A[i];
    if(A[i] > 0){
      s.push_back(A[i]);
    }else if(A[i] < 0){
      h.push_back(A[i]);
    }else{
      z.push_back(A[i]);
    }
  }
  sort(all(s));
  reverse(all(s));

  sort(all(h));
  
  int sz_s = s.size();
  int sz_h = h.size();
  int sz_z = z.size();
  if(K%2 == 0){
    //正が偶個+負が偶数個
    if(sz_s/2*2 + sz_h/2*2 >=K){
      ll ans = 1;
      int ids=0, idh=0;
      for(int i=0; i<K; i+=2){
        ll a=-1, b=-1;
        if(ids+1<s.size()){
          a = s[ids]*s[ids+1];
        }
        if(idh+1<h.size()){
          b = h[idh]*h[idh+1];
        }

        if(a == -1){
          idh+=2;
          b %= MOD;
          ans *= b;
          ans %= MOD;
        }else if(b == -1){
          ids+=2;
          a %= MOD;
          ans *= a;
          ans %= MOD;
        }else{
          if(a > b){
            ids+=2;
            a %= MOD;
            ans *= a;
            ans %= MOD;
          }else{
            idh+=2;
            b %= MOD;
            ans *= b;
            ans %= MOD;
          }
        }
      }
      cout << ans << endl;
    }else{
      // 負
      if(sz_z){
        cout << 0 << endl;
      }else{
        //絶対値の小さい順に取る
        vector<ll> vv;
        sort(all(A), [&](ll &a, ll &b){ return abs(a) < abs(b);});

        ll ans = 1;
        for(int i=0; i<K; i++){
          ans *= (A[i]+MOD);
          
          ans %= MOD;
        }
        cout << ans << endl;
      }
    }

  }else{
    //負が偶数個+正が奇数

    if(sz_s != 0 && sz_h/2*2 + sz_s >= K){
      ll ans = s[0];
      int ids=1, idh=0;
      
      for(int i=1; i<K;){
        ll a=-1, b=-1;
        if(ids+1<s.size()){
          a = s[ids]*s[ids+1];
        }
        if(idh+1<h.size()){
          b = h[idh]*h[idh+1];
        }
        
        if(a == -1){
          idh+=2;
          b %= MOD;
          ans *= b;
          ans %= MOD;
          i+=2;
        }else if(b == -1){
          ids+=2;
          a %= MOD;
          ans *= a;
          ans %= MOD;
          i+=2;
        }else{
          if(a > b){
            ids+=2;
            a %= MOD;
            ans *= a;
            ans %= MOD;
            i+=2;
          }else{
            idh+=2;
            b %= MOD;
            ans *= b;
            ans %= MOD;
            i+=2;
          }
        }
      }
      cout << ans << endl;

    }else{
      if(sz_z){
        cout << 0 << endl;
      }else{
        //絶対値の小さい順に取る
        vector<ll> vv;
        sort(all(A), [&](ll &a, ll &b){ return abs(a) < abs(b);});

        ll ans = 1;
        for(int i=0; i<K; i++){
          ans *= (A[i]+MOD);
          ans %= MOD;
        }
        cout << ans << endl;
      }
    }
  }


  

  return 0;
}


Measured memory_bytes: 6920