object Main{
  def main(args: Array[String]): Unit = {
    //n <- 本数  k <- 火をつける数
    val Seq(n, k) : Seq[Int] = io.StdIn.readLine().split(' ').map(_.toInt).toList
    val candles : Seq[Int] = io.StdIn.readLine().split(' ').map(_.toInt).toList
    println(sunukeSetFire(n,k,candles))
  }


  def calcDistance2(list: List[Int]) : Int = {
    var distance = 0
    val (nega, posi) = list.span(_ <= 0)
    if(nega.isEmpty) return posi.max
    if(posi.isEmpty) return nega.min * (-1)
    if(nega.min*(-1) < posi.max) (nega.min*(-1))*2 + posi.max
    else nega.min*(-1) + (posi.max)*2
  }
  def calcDistance(list: List[Int]) : Int = {
    list.span(_ <= 0) match {
      case (nega,posi) if(nega.isEmpty)             => posi.max
      case (nega,posi) if(posi.isEmpty)             => nega.min*(-1)
      case (nega,posi) if(nega.min*(-1) < posi.max) => (nega.min*(-1))*2 + posi.max
      case (nega,posi)                              => nega.min*(-1) + (posi.max)*2
    }
  }

  /**
    * 0以上になるときのindexを返す
    * 0以上がないときは最後のindexを返す
    * @param candle
    * @return
    */
  def getFirstIndexGreaterThanZero(candle: Seq[Int]) ={
    candle.zipWithIndex.find(_._1 >=0).map(_._2).getOrElse(candle.length-1)
  }

  def sunukeSetFire(n:Int, k:Int, candles:Seq[Int]):Int ={
    var distances : List[Int] = Nil
    var index = (getFirstIndexGreaterThanZero(candles) - k) match {
      case num if(num >= 0) => num
      case _ => 0
    }
    val maxIndex = index + k + k
    while(index + k <= candles.length && index + k <= maxIndex){
      //List(index)からList(index+k)までのリストを作る
      var list :List[Int] = Nil
      var index2 = index
      while(index2 < index + k ){
        list = candles(index2) :: list
        index2 += 1
      }
      distances = calcDistance(list.reverse) :: distances
      index += 1
    }
    distances.min
  }
}