#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
const long long MOD=1e9+7;
const long double Pi=acos(-1);
using  P=pair<ll,ll>;
ll gcd(ll a,ll b){//aとbの最大公約数を返す//計算量は0(log(max(a,b))
  if(a%b==0){return b;}
  else{return gcd(b,a%b);}
}
ll lcm(ll a,ll b){//aとbの最小公倍数を返す//計算量は0(log(max(a,b))
  return a*b/gcd(a,b);
}
ll pow(ll x,ll y){//x^yを返す//計算量は0(log(y))
  ll tmp=x,res=1;
  while(y){
    if(y%2){res=res*tmp%MOD;}
    y>>=1;
    tmp=tmp*tmp%MOD;
  }
  return res;
}
ll nature(ll a){//絶対値を返す
  if(a>=0){return(a);}
  else{return(-1*a);}
}
ll prime(ll a){//素数なら1を返す//計算量は0(sqrt(a))
  if(a==2){return 1;}
  else if(a%2==0 || a==1){return 0;}
  for(ll i=3;i*i<=a;i+=2){if(a%i==0){return 0;}}
  return 1;
}
int main(){
  ll N,K,a,ans=1;
  cin>>N>>K;
  vector<ll> A(0);
  vector<ll> B(0);
  for(ll i=0;i<N;i++){
    cin>>a;
    if(a>=0){A.push_back(a);}
    else{B.push_back(a);}
  }
  sort(A.begin(),A.end());
  reverse(A.begin(),A.end());
  sort(B.begin(),B.end());
  ll x=0;
  ll y=0;
  //cout<<A.size()<<" "<<B.size()<<endl;
  if(B.size()==0){
    for(int i=0;i<K;i++){
      ans*=A.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  if(A.size()==0){
    if(K%2==1){
    for(int i=0;i<K;i++){
      ans*=B.at((ll)B.size()-i-1);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    }
    else{
    for(int i=0;i<K;i++){
      ans*=B.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    }
    cout<<ans<<endl;
    return 0;
  }
  if(N==K+1){
    if((int)B.size()%2==1){
      for(int i=0;i<(ll)A.size();i++){
      ans*=A.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    for(int i=0;i<(ll)B.size()-1;i++){
      ans*=B.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    cout<<ans<<endl;
    return 0;
    }
    else{
      for(int i=0;i<(ll)A.size()-1;i++){
      ans*=A.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    for(int i=0;i<(ll)B.size();i++){
      ans*=B.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    cout<<ans<<endl;
    return 0;
    }
  }
  if(N==K){
    for(int i=0;i<(ll)A.size();i++){
      ans*=A.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    for(int i=0;i<(ll)B.size();i++){
      ans*=B.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  /*
  int bb=max((ll)0,K-(ll)A.size()+(K-(ll)A.size())%2);
  for(int i=0;i<K-bb;i++){
    ans*=A.at(i);
    ans%=MOD;
    ans+=MOD;
    ans%=MOD;
  }
  for(int i=0;i<bb;i++){
    ans*=B.at(i);
    ans%=MOD;
    ans+=MOD;
    ans%=MOD;
  }
  */
  for(int i=0;i<K;i++){
    if(x==(ll)A.size()){y++;continue;}
    if(y==(ll)B.size()){x++;continue;}
    if(A.at(x)>=-1*B.at(y)){x++;}
    else{y++;}
  }
  if(x==0){
    if(y%2==0){
    for(int i=0;i<y;i++){
      ans*=B.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    cout<<ans<<endl;
    return 0;
    }
    else{
    ans=A.at(0);
    for(int i=0;i<y-1;i++){
      ans*=B.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    cout<<ans<<endl;
    return 0;
    }
  }
  if(y==0){
    for(int i=0;i<x;i++){
      ans*=A.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  if(y%2==0){
    for(int i=0;i<x;i++){
      ans*=A.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    for(int i=0;i<y;i++){
      ans*=B.at(i);
      ans%=MOD;
      ans+=MOD;
      ans%=MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  else{
    if(x==(ll)A.size()){
      for(int i=0;i<x-1;i++){
        ans*=A.at(i);
        ans%=MOD;
        ans+=MOD;
        ans%=MOD;
      }
      for(int i=0;i<y+1;i++){
        ans*=B.at(i);
        ans%=MOD;
        ans+=MOD;
        ans%=MOD;
      }
      cout<<ans<<endl;
      return 0;
    }
    if(y==(ll)B.size()){
      for(int i=0;i<x+1;i++){
        ans*=A.at(i);
        ans%=MOD;
        ans+=MOD;
        ans%=MOD;
      }
      for(int i=0;i<y-1;i++){
        ans*=B.at(i);
        ans%=MOD;
        ans+=MOD;
        ans%=MOD;
      }
      cout<<ans<<endl;
      return 0;
    }
    if(A.at(x)*A.at(x-1)>=B.at(y)*B.at(y-1)){
      for(int i=0;i<x+1;i++){
        ans*=A.at(i);
        ans%=MOD;
        ans+=MOD;
        ans%=MOD;
      }
      for(int i=0;i<y-1;i++){
        ans*=B.at(i);
        ans%=MOD;
        ans+=MOD;
        ans%=MOD;
      }
      cout<<ans<<endl;
      return 0;
    }
    else{
      for(int i=0;i<x-1;i++){
        ans*=A.at(i);
        ans%=MOD;
        ans+=MOD;
        ans%=MOD;
      }
      for(int i=0;i<y+1;i++){
        ans*=B.at(i);
        ans%=MOD;
        ans+=MOD;
        ans%=MOD;
      }
      cout<<ans<<endl;
      return 0;
    }
  }
}

Measured memory_bytes: 5396