fun main() {
    val mod = 1000000007L
    val (n, k) = readInts()
    val a = readInts().map { it.toLong() }
    val positives = a.filter { it > 0L }.sorted().reversed()
    val zeros = a.filter { it == 0L }
    var negatives = a.filter { it < 0L }.sorted()

    fun mapNumToMod(num: Long): Long {
        val times = kotlin.math.abs(num / mod) + 1
        return (times * mod + num) % mod
    }

    fun addNums(source: List<Long>, destination: MutableList<Long>, from: Int, to: Int): Int {
        destination.addAll(source.subList(from, to))
        return to - from
    }

    if (positives.isEmpty() && zeros.isEmpty()) {
        if (k % 2 == 1) negatives = negatives.reversed()
        val prod = negatives.subList(0, k).map {
            mapNumToMod(it)
        }.reduce { acc, num ->
            (acc * num) % mod
        }
        println(prod)
    } else if (positives.isEmpty() && k % 2 == 1) println(0)
    else if (n - zeros.size < k) println(0)
    else {
        val combined = mutableListOf<Long>()
        var pos = 0
        var neg = 0
        if (k % 2 == 1) {
            combined.add(positives[pos])
            pos++
        }
        while (combined.size < k) {
            if (pos + 2 <= positives.size && neg + 2 <= negatives.size) {
                if (positives[pos] * positives[pos + 1] >= negatives[neg] * negatives[neg + 1]) {
                    pos += addNums(positives, combined, pos, pos + 2)
                } else neg += addNums(negatives, combined, neg, neg + 2)
            } else if (pos + 2 <= positives.size) pos += addNums(positives, combined, pos, pos + 2)
            else if (neg + 2 <= negatives.size) neg += addNums(negatives, combined, neg, neg + 2)
            else {
                if (pos < positives.size) pos += addNums(positives, combined, pos, pos + 1)
                else if (neg < negatives.size) neg += addNums(negatives, combined, neg, neg + 1)
            }
        }

        if (neg % 2 == 1 && zeros.isNotEmpty()) println(0)
        else println(combined.map { mapNumToMod(it) }.reduce { acc, num -> (acc * num) % mod })
//        println(combined)
    }

}

// Input Reader
private fun readLn() = readLine()!!

private fun readStrings() = readLn().trim().split(" ")
private fun readInts() = readStrings().map { it.toInt() }
