import java.util.*
import kotlin.math.abs

fun main() {
    var (n,k) = readLine()!!.split(" ").map { it.toInt() }
    val arr = readLine()!!.split(" ").map { it.toLong() }.toLongArray()
    val mod = (1e9+7).toLong()
    val po = arr.count { it >= 0 }
    val no = arr.size - po
    var ans = 1L

    if((po == 0 && k % 2 != 0) || k == n) {
        arr.sortDescending()
        for(i in 0 until k) {
            ans *= (mod + arr[i])
            ans %= mod
        }
    } else {
        val aa = arr.sortedByDescending { abs(it) }.toLongArray()
        var negCnt = 0

        for(i in 0 until k) {
            if(aa[i] < 0)
                negCnt++
        }

        if(negCnt % 2 != 0) {
            //swap
            var pi = -1
            var ni = -1
            var pii = -1
            var nii = -1
            var lastP = 0L
            var lastN = 0L
            var fstP = 0L
            var fstN = 0L

            for(i in k - 1 downTo 0) {
                if(aa[i] >= 0) {
                    lastP = aa[i]
                    pi = i
                    break
                }
            }

            for(i in k - 1 downTo 0) {
                if(aa[i] < 0) {
                    lastN = abs(aa[i])
                    ni = i
                    break
                }
            }
            for(i in k until n) {
                if(aa[i] >= 0) {
                    fstP = aa[i]
                    pii = i
                    break
                }
            }
            for(i in k until n) {
                if(aa[i] < 0) {
                    fstN = abs(aa[i])
                    nii = i
                    break
                }
            }
            val ad = fstP * lastP
            val bc = fstN * lastN

            // 음수가 전부 몰려있는 경우
            // 양수 전부에 음수 일부,
            if((ad > bc || nii == -1 || pi == -1) && (pii != -1 && ni != -1)) {
                // 음수를 양수로 바꿈.
                aa[ni] = aa[pii]
            } else {
                // 양수를 음수로 바꿈.
                aa[pi] = aa[nii]
            }

        }

        for(i in 0 until k) {
            ans *= (mod + aa[i])
            ans %= mod
        }


        // 음 -> 양
        // 양 -> 음
//        var poArr = arr.filter { it >= 0 }.sortedDescending()
//        val negArr = arr.filter { it < 0 }.sorted()
//        var pp = 0
//        var np = 0
//        var cnt = 0
//
//
//
//        if(k % 2 != 0) {
//            //poArr 에서 하나 뽑는다.
//            ans *= poArr[0]
//            poArr = poArr.subList(1, poArr.size)
//            k--
//        }
//
//        val pq = PriorityQueue<Long>(compareByDescending { it })
//
//        while ( poArr.size - pp >= 2) {
//            val v = (poArr[pp] * poArr[pp + 1]) % mod
//            pq.add(v)
//            pp+=2
//        }
//
//        while ( negArr.size - np >= 2) {
//            val v = (negArr[np] * negArr[np + 1]) % mod
//            pq.add(v)
//            np+=2
//        }
//
//        while(cnt * 2 < k) {
//            val v = pq.poll()
//            ans *= v
//            ans %= mod
//            ++cnt
//        }
    }
    print(ans)

}