#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int main() {
  int n, k;
  cin >> n >> k;
  int cnt0 = 0;
  vector<long long> pvec, mvec;
  vector<pair<int, int> > vec;
  for (int i = 0; i < (n); i++) {
    long long t;
    cin >> t;
    if (t < 0) {
      vec.push_back(make_pair(-t, -1));
      mvec.push_back(-t);
    } else {
      vec.push_back(make_pair(t, 1));
      pvec.push_back(t);
    }
  }
  sort(vec.begin(), vec.end());
  reverse(vec.begin(), vec.end());
  sort(pvec.begin(), pvec.end(), greater<long long>());
  sort(mvec.begin(), mvec.end(), greater<long long>());
  if (n == k) {
    long long ans = 1;
    for (auto v : vec) {
      if (v.first < 0) {
        ans = ans * (MOD + v.first) % MOD;
      } else {
        ans = ans * v.first % MOD;
      }
    }
    cout << ans << endl;
    return 0;
  }
  if (mvec.size() == n && k % 2 == 1) {
    long long ans = 1;
    for (int i = 0; i < (k); i++) {
      ans = ans * (MOD - mvec[n - 1 - i]) % MOD;
    }
    cout << ans << endl;
    return 0;
  }
  sort(vec.begin(), vec.end());
  reverse(vec.begin(), vec.end());
  sort(pvec.begin(), pvec.end(), greater<long long>());
  sort(mvec.begin(), mvec.end(), greater<long long>());
  int p = 0;
  int m = 0;
  for (int i = 0; i < (k); i++) {
    if (vec[i].second == 1) {
      p++;
    } else {
      m++;
    }
  }
  long long ans = 1;
  if (m % 2 == 0) {
    for (int i = 0; i < (k); i++) {
      ans = (vec[i].first * ans) % MOD;
    }
    cout << ans << endl;
    return 0;
  } else {
    if (p == pvec.size()) {
      p--;
      m++;
    } else if (m == mvec.size()) {
      p++;
      m--;
    } else {
      if (pvec[p] * pvec[p - 1] > mvec[m - 1] * mvec[m]) {
        p++;
        m--;
      } else {
        p--;
        m++;
      }
    }
  }
  for (int i = 0; i < (p); i++) {
    ans = (pvec[i] * ans) % MOD;
  }
  for (int i = 0; i < (m); i++) {
    ans = (mvec[i] * ans) % MOD;
  }
  cout << ans << endl;
  return 0;
}
