#include <bits/stdc++.h>

using namespace std;
typedef long long int ll;
ll mod=1000000007;
int main() {
    
    ll k, n, i, a[200001], dap=1, exist0=0, yangsu=0, eumsu=0, b[1000001];
    cin>>n>>k;
    for(i=1;i<=n;i++)
    {
    scanf("%lld", a+i);
    exist0+=(a[i]==0);
    yangsu+=(a[i]>0);
    eumsu+=(a[i]<0);
    }
    sort(a+1, a+(n+1));
    if(exist0)
    {
        if(k>(eumsu+yangsu))
        dap=0;
        else
        {
            if(yangsu==0)
            {
                if(k%2)
                dap=0;
                else
                {
                    for(i=1;i<=k;i++)
                    {
                        dap*=a[i];
                        dap%=mod;
                    }
                }
            }
            else if(k==(eumsu+yangsu))
            {
                if(eumsu%2)
                dap=0;
                else
                {
                    dap=1;
                    for(i=1;i<=n;i++)
                    {
                        if(a[i])
                        {
                            dap*=a[i];
                            dap%=mod;
                        }
                    }
                }
            }
            else
            {
                if(k%2)
                {
                ll minus[200001], plus[200001], x=1, y=1;
                for(i=1;i<=n;i++)
                {
                    if(a[i]>0)
                    {
                        plus[x]=a[i];
                        x++;
                    }
                    else if(a[i]<0)
                    {
                        minus[y]=a[i];
                        y++;
                    }
                }
                sort(minus+1, minus+(eumsu+1));
                sort(plus+1, plus+(yangsu+1));
                x=1;
                for(i=1;i<=(eumsu)/2;i++)
                {
                    b[x]=(minus[2*i-1]*minus[2*i]);
                    x++;
                }
                dap=plus[yangsu];
                for(i=1;i<=(yangsu-1)/2;i++)
                {
                    b[x]=(plus[yangsu-2*i+1]*plus[yangsu-2*i]);
                    x++;
                }
                sort(b+1, b+((eumsu/2)+(yangsu/2)+1));
                for(i=1;i<=(eumsu/2)+(yangsu/2);i++)
                b[i]%=mod;
                for(i=1;i<=k/2;i++)
                {
                    dap*=b[((eumsu/2)+(yangsu/2)+1)-i];
                    dap%=mod;
                }
                }
                else
                {
                ll minus[200001], plus[200001], x=1, y=1;
                for(i=1;i<=n;i++)
                {
                    if(a[i]>0)
                    {
                        plus[x]=a[i];
                        x++;
                    }
                    else if(a[i]<0)
                    {
                        minus[y]=a[i];
                        y++;
                    }
                }
                sort(minus+1, minus+(eumsu+1));
                sort(plus+1, plus+(yangsu+1));
                x=1;
                for(i=1;i<=(eumsu)/2;i++)
                {
                    b[x]=(minus[2*i-1]*minus[2*i]);
                    x++;
                }
                for(i=1;i<=(yangsu)/2;i++)
                {
                    b[x]=(plus[yangsu-2*i+1]*plus[yangsu-2*i+2]);
                    x++;
                }
                sort(b+1, b+((eumsu/2)+(yangsu/2)+1));
                for(i=1;i<=(eumsu/2)+(yangsu/2);i++)
                b[i]%=mod;
                for(i=1;i<=k/2;i++)
                {
                    dap*=b[((eumsu/2)+(yangsu/2)+1)-i];
                    dap%=mod;
                }
                }
            }
        }
    }
    else
    {
        if(k==n)
        {
            for(i=1;i<=n;i++)
            {
                dap*=a[i];
                dap%=mod;
            }
        }
        else
        {
            if(eumsu==0)
            {
                
                dap=1;
                for(i=n;i>(n-k);i--)
                {
                    dap*=a[i];
                    dap%=mod;
                }
            }
            else if(yangsu==0)
            {
                if(k%2)
                {
                    for(i=n;i>(n-k);i--)
                {
                    dap*=a[i];
                    dap%=mod;
                }
                }
                else
                {
                    for(i=1;i<=k;i++)
                {
                    dap*=a[i];
                    dap%=mod;
                }
                }
            }
            else
            {
                if(k%2)
                {
                ll minus[200001], plus[200001], x=1, y=1;
                for(i=1;i<=n;i++)
                {
                    if(a[i]>0)
                    {
                        plus[x]=a[i];
                        x++;
                    }
                    else if(a[i]<0)
                    {
                        minus[y]=a[i];
                        y++;
                    }
                }
                sort(minus+1, minus+(eumsu+1));
                sort(plus+1, plus+(yangsu+1));
                x=1;
                for(i=1;i<=(eumsu)/2;i++)
                {
                    b[x]=(minus[2*i-1]*minus[2*i]);
                    x++;
                }
                dap=plus[yangsu];
                for(i=1;i<=(yangsu-1)/2;i++)
                {
                    b[x]=(plus[yangsu-2*i+1]*plus[yangsu-2*i]);
                    x++;
                }
                sort(b+1, b+((eumsu/2)+(yangsu/2)+1));
                for(i=1;i<=(eumsu/2)+(yangsu/2);i++)
                b[i]%=mod;
                for(i=1;i<=k/2;i++)
                {
                    dap*=b[((eumsu/2)+(yangsu/2)+1)-i];
                    dap%=mod;
                }
                }
                else
                {
                ll minus[200001], plus[200001], x=1, y=1;
                for(i=1;i<=n;i++)
                {
                    if(a[i]>0)
                    {
                        plus[x]=a[i];
                        x++;
                    }
                    else if(a[i]<0)
                    {
                        minus[y]=a[i];
                        y++;
                    }
                }
                sort(minus+1, minus+(eumsu+1));
                sort(plus+1, plus+(yangsu+1));
                x=1;
                for(i=1;i<=(eumsu)/2;i++)
                {
                    b[x]=(minus[2*i-1]*minus[2*i]);
                    x++;
                }
                for(i=1;i<=(yangsu)/2;i++)
                {
                    b[x]=(plus[yangsu-2*i+1]*plus[yangsu-2*i+2]);
                    x++;
                }
                sort(b+1, b+((eumsu/2)+(yangsu/2)+1));
                for(i=1;i<=(eumsu/2)+(yangsu/2);i++)
                b[i]%=mod;
                for(i=1;i<=k/2;i++)
                {
                    dap*=b[((eumsu/2)+(yangsu/2)+1)-i];
                    dap%=mod;
                }
                }
            }
        }
    }
    
    dap+=mod;
    dap%=mod;
    cout<<dap;
    return 0;
}

Measured memory_bytes: 7680