#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
long long sum = 1;
int a[200005],flag = 0;
bool cmp(int a,int b) {
return abs(a) > abs(b);
}
int main() {
int n,k; scanf("%d%d",&n,&k);
for(int i = 1;i <= n;i ++) {
scanf("%d",&a[i]);
if(a[i] > 0) flag = 1;
}
sort(a + 1,a + n + 1,cmp);
if(flag == 0) {
long long sum = 1;
for(int i = n;i >= n - k + 1;i --) {
sum = (sum * a[i]) % mod;
}
printf("%lld\n",sum % mod);
return 0;
}
int fs = 0;
for(int i = 1;i <= k;i ++) {
if(a[i] < 0) {
fs ++;
}
}
if(fs % 2 == 0) {
for(int i = 1;i <= k;i ++) {
sum = (sum * a[i]) % mod;
}
printf("%lld\n",sum % mod);
}
else {
long long maxl = -mod;
int pfs,pzs = 200005;
for(int i = k;i >= 1;i --) {
if(a[i] < 0) {
pfs = i;
break;
}
}
for(int i = k + 1;i <= n;i ++) {
if(a[i] > 0) {
pzs = i;
break;
}
}
if(pzs != 200005) {
for(int i = 1;i <= k;i ++) {
if(i == pfs) {
sum = (sum * a[pzs]) % mod;
}
else {
sum = (sum * a[i]) % mod;
}
}
maxl = max(maxl,sum % mod);
}
pfs = pzs = 200005;
sum = 1;
for(int i = k;i >= 1;i --) {
if(a[i] > 0) {
pzs = i;
break;
}
}
for(int i = k + 1;i <= n;i ++) {
if(a[i] < 0) {
pfs = i;
break;
}
}
if(pfs != 200005) {
for(int i = 1;i <= k;i ++) {
if(i == pzs) {
sum = (sum * a[pfs]) % mod;
}
else {
sum = (sum * a[i]) % mod;
}
}
maxl = max(maxl,sum % mod);
}
printf("%lld\n",maxl);
}
return 0;
}