Problem:
Score : 300 points

Problem Statement

There are N candles placed on a number line.
The i-th candle from the left is placed on coordinate x_i.
Here, x_1 < x_2 < ... < x_N holds.

Initially, no candles are burning.
Snuke decides to light K of the N candles.

Now, he is at coordinate 0.
He can move left and right along the line with speed 1.
He can also light a candle when he is at the same position as the candle, in negligible time.

Find the minimum time required to light K candles.

Constraints

1 \leq N \leq 10^5

1 \leq K \leq N

x_i is an integer.

|x_i| \leq 10^8

x_1 < x_2 < ... < x_N

Input

Input is given from Standard Input in the following format:

N K
x_1 x_2 ... x_N

Output

Print the minimum time required to light K candles.

Sample Input 1

5 3
-30 -10 10 20 50

Sample Output 1

40

He should move and light candles as follows:

Move from coordinate 0 to -10.

Light the second candle from the left.

Move from coordinate -10 to 10.

Light the third candle from the left.

Move from coordinate 10 to 20.

Light the fourth candle from the left.

Sample Input 2

3 2
10 20 30

Sample Output 2

20

Sample Input 3

1 1
0

Sample Output 3

0

There may be a candle placed at coordinate 0.

Sample Input 4

8 5
-9 -7 -4 -3 1 2 3 4

Sample Output 4

10

Solution in Fortran (gfortran v4.8.4) (judge verdict: Wrong Answer)

implicit none
integer :: n,k
integer,allocatable :: x(:), z(:)
integer :: i,j,t1,t2,rswp,l,r
logical :: flg_swp,flg_l,flg_r

read *,n,k
allocate(x(n))
read *,(x(i),i=1,n)

allocate(z(n))

!!!!!!!!!!!!!!!!! If go to left first ==> t1
do i = 1, n
   if (x(i) < 0) then
      z(i) = 2*x(i)
   else
      z(i) = x(i)
   endif
enddo

i = n
flg_swp = .false.
do while (i > 1 .or. flg_swp)
   i = (i * 10) / 13
   if (i < 1) then
      i = 1
   else if (i == 9 .or. i == 10) then 
      i = 11
   endif
   flg_swp = .false.
   do j = 1, n-i
      if (abs(z(j)) > abs(z(j+i))) then
         rswp = z(j) 
         z(j) = z(j+i)
         z(j+i) = rswp
         flg_swp = .true.
      endif
   enddo
enddo

l = 0
r = 0
flg_l = .false.
flg_r = .false.
do i = k,1,-1
   if (z(i) < 0) then
      if (flg_l) cycle
      l = -z(i)
      flg_l = .true.
   else
      if (flg_r) cycle
      r = z(i)
      flg_r = .true.
   endif
   if (flg_l .and. flg_r) then
      exit
   endif
enddo
t1 = l + r

!!!!!!!!!!!!!!!!! If go to right first ==> t2
do i = 1, n
   if (x(i) < 0) then
      z(i) = x(i)
   else
      z(i) = 2*x(i)
   endif
enddo

i = n
flg_swp = .false.
do while (i > 1 .or. flg_swp)
   i = (i * 10) / 13
   if (i < 1) then
      i = 1
   else if (i == 9 .or. i == 10) then 
      i = 11
   endif
   flg_swp = .false.
   do j = 1, n-i
      if (abs(z(j)) > abs(z(j+i))) then
         rswp = z(j) 
         z(j) = z(j+i)
         z(j+i) = rswp
         flg_swp = .true.
      endif
   enddo
enddo

l = 0
r = 0
flg_l = .false.
flg_r = .false.
do i = k,1,-1
   if (z(i) < 0) then
      if (flg_l) cycle
      l = -z(i)
      flg_l = .true.
   else
      if (flg_r) cycle
      r = z(i)
      flg_r = .true.
   endif
   if (flg_l .and. flg_r) then
      exit
   endif
enddo
t2 = l + r

print '(i0)',min(t1,t2)
end