#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 7;
const int mod = 1e9 + 7;

int n;
int k, z;
long long sum;
int a[N];

int pref[N], suff[N];

long long ans = 1LL;

int main()
{
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        //freopen("in.in" , "r" , stdin) ;

        cin >> n >> k;
        int good = 0;
        int gr = 0 ;
        int rem = k;  
        for (int i = 0; i < n; i++)
        {
                cin >> a[i];
                if (a[i] < 0)
                {
                        if(gr){
                                gr = 0 ; 
                                if(rem > 1){
                                        rem-=2 ; 
                                }
                        }
                        else gr++ ;
                        pref[i] = suff[i] = 1;
                }
                else if (a[i] > 0)
                {
                        if(rem) rem-- ;
                }
                else
                        z = 1;

                if (i)
                {
                        pref[i] += pref[i - 1];
                }
        }

        sort(a, a + n);

        if (rem)
        {
                if (z)
                {
                        cout << 0;
                        return 0;
                }
                sort(a, a + n, [&](int x, int y) {
                        return abs(x) < abs(y);
                });

                for (int i = 0; i < k; i++)
                {
                        ans = (1LL * ans * a[i]) % mod;
                        ans = (ans + mod) % mod;
                }

                cout << ans;

                return 0;
        }

        sort(a, a + n, [&](int x, int y) {
                return abs(x) > abs(y);
        });


        int sgn = 0 ;

        int ne = n , np = n ; 
        for(int i = 0 ;i < k;i++){
                if(a[i] < 0){
                        sgn ^= 1 ; 
                        ne = i ; 
                }else if(a[i] > 0){
                        np = i ; 
                }else{
                        cout<< z ; 
                        return 0 ; 
                }
        }

        int nne = n , nnp = n ;
        int lok = -1 ; 

        if(sgn){        
                for(int i = k ;i < n ;i++){
                        if( a[i] > 0){
                                nnp = min(nnp , i) ; 
                        }       
                        else if(a[i] < 0) {
                                nne = min(nne , i) ; 
                        }
                }
                bool adr = 0 ;
                if( (nne == n || np == n) && (nnp < n && ne < n) ){
                        lok = ne ; 
                        ans = a[nnp] ; 
                        adr =1 ; 
                }
                else if ( (nnp == n || ne == n) && (np < n && nne < n)){
                        lok = np ; 
                        ans = a[nne] ; 
                        adr = 1; 
                }
                else if(1LL * a[nnp] * a[np] >1LL *  a[nne] * a[ne] && max(max(ne , nne) , max(np , nnp)) < n){
                        lok = ne ;
                        ans = a[nnp] ; 
                        adr = 1 ; 
                }
                else if(max(max(ne , nne ) , max(np , nnp) ) < n) {
                        lok = np ; 
                        ans = a[nne] ; 
                        adr = 1 ; 
                }               
                if(!adr){
                        cout<< 0 ; 
                        return 0;
                }
        }

        for(int i = 0 ;i < k ;i++){
                if(i == lok)
                        continue ; 
                ans = (1LL * ans * a[i]) % mod ;  ; 
                ans = (ans + mod) %mod ; 

        }

        cout << ans;
        return 0;
}

Measured memory_bytes: 5896