// Problem : E - Multiplication 4
// Contest : AtCoder - AtCoder Beginner Contest 173
// URL : https://atcoder.jp/contests/abc173/tasks/abc173_e
// Memory Limit : 1024 MB
// Time Limit : 2000 ms
// Powered by CP Editor (https://github.com/coder3101/cp-editor)

// Mere bas ka nahi hai
// still i'm trying
// apna time aayega
//
//        .--------------.  
//        | Try First One|
//        '--------------'
//                |     .--------------.
//                |     |              |
//                V     V              |
//              .--------------.       |
//              |      AC.     |<---.  |  
//              '--------------'    |  |
//              (True)|  |(False)   |  |
//           .--------'  |          |  |
//           |           V          |  |
//           |  .--------------.    |  |
//           |  |   Try Again  |----'  |
//           |  '--------------'       |
//           |                         |
//           |  .--------------.       |
//           '->| Try Next One |-------'
//              '--------------'                          		  
//
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll power(ll x,ll y,ll m){if(y==0)return 1;ll p=power(x,y/2,m)%m;p=(p*p)%m;return (y%2==0)?p:(x*p)%m;}
ll nCr(ll n,ll r,ll m){if(r>n)return 0;ll a=1,b=1,i;for(i=0;i<r;i++){a=(a*n)%m;--n;}while(r){b=(b*r)%m;--r;}return (a*power(b,m-2,m))%m;}
#define Test int t;cin>>t;while(t--)
#define endl '\n'
void solve()
{
	int n,k;
	cin >> n >> k;
	vector<pair<ll,bool>> v(n);
	int pos=0;
	for(int i=0;i<n;++i){
		cin >> v[i].first;
		if(v[i].first<0)
		v[i].second=1;
		else
		pos++;
		v[i].first=abs(v[i].first);
	}
	sort(v.rbegin(),v.rend());
	vector<ll> ansp,ansn;
	for(int i=0;i<k;++i)
	{
		if(v[i].second)
		ansn.push_back(v[i].first);
		else
		ansp.push_back(v[i].first);
	}
	int c=ansn.size();
	if(ansp.empty() && c%2)
	{
		if(pos==0)
		{
		reverse(v.begin(),v.end());
		ll ans=1;
		for(int i=0;i<k;++i)
		{
			ans=ans*v[i].first;
			ans%=((ll)1e9+7);
		}
		ans*=-1;
		if(ans<0)
		ans+=((ll)1e9+7);
		cout << ans << endl;
		return;
		}
		else
		{
			ansn.pop_back();
			for(int i=0;i<n;++i)
			{
				if(v[i].second==0)
				{ansp.push_back(v[i].first);break;}
			}
			c=0;
			
		}
	}
	if(c%2 && !ansp.empty())
	{
		ll temp1=ansn.back();
		ll temp2=ansp.back();
		int f1=0,f2=0;
		for(int i=k;i<n;++i)
		{
			if(v[i].second)
			{
				temp1*=v[i].first;
				f1=1;
				break;
			}
		}
		for(int i=k;i<n;++i)
		{
			if(!v[i].second)
			{
				temp2*=v[i].first;
				f2=1;
				break;
			}
		}
		if(temp1>temp2 && f1)
		{
			ansn.push_back(temp1/ansn.back());
			ansp.pop_back();
		}
		else if(f2)
		{
			ansp.push_back(temp2/ansp.back());
			ansn.pop_back();
		}
		else
		{
			ll ans=1;
			for(ll u:ansp)
			{
				ans*=u;
				ans%=((ll)1e9+7);
			}
			for(ll u:ansn)
			{
				ans*=u;
				ans%=((ll)1e9+7);
			}
			ans*=-1;
			if(ans<0)
			ans+=((ll)1e9+7);
			cout << ans << endl;
			return;
		}
	}
	ll ans=1;
	for(ll u:ansp)
	{
		ans*=u;
		ans%=((ll)1e9+7);
	}
	for(ll u:ansn)
	{
		ans*=u;
		ans%=((ll)1e9+7);
	}
	cout << ans << endl;
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	//Test
	solve();
	return 0;
}


Measured memory_bytes: 8660