#リストの挿入と最大値の取得を同時に行う

#そのようなものを高速でできるデータ構造としてheapq(優先度つきqがあげられる)

#最大値を取得する関数はheapqには入ってないためリストの要素を-1倍してから最小値を求めればいい

n,m=list(map(int,input().split()))

a=list(map(int,input().split()))

a=list([x*(-1) for x in a])



import heapq

heapq.heapify(a)

for i in range(m):

  min_a=heapq.heappop(a)*(-1)

  heapq.heappush(a,min_a//2*(-1))

print((sum(a)*(-1)))





n,m=list(map(int,input().split()))

a=list(map(int,input().split()))

a=list([x*(-1) for x in a])



import heapq

heapq.heapify(a)

for i in range(m):

  q=heapq.heappop(a)

  heapq.heappush(a,int(q/2))

print((sum(a)*(-1)))



  

  
# リストの挿入と最大値の取得を同時に行う
# そのようなものを高速でできるデータ構造としてheapq(優先度つきqがあげられる)
# 最大値を取得する関数はheapqには入ってないためリストの要素を-1倍してから最小値を求めればいい
n, m = list(map(int, input().split()))
a = list(map(int, input().split()))
a = list([x * (-1) for x in a])
import heapq

heapq.heapify(a)
for i in range(m):
    min_a = heapq.heappop(a) * (-1)
    heapq.heappush(a, min_a // 2 * (-1))
print((sum(a) * (-1)))

n, m = list(map(int, input().split()))
a = list(map(int, input().split()))
a = list([x * (-1) for x in a])
import heapq

heapq.heapify(a)
for i in range(m):
    q = heapq.heappop(a)
    heapq.heappush(a, int(q / 2))
print((sum(a) * (-1)))

-# リストの挿入と最大値の取得を同時に行う -# そのようなものを高速でできるデータ構造としてheapq(優先度つきqがあげられる) -# 最大値を取得する関数はheapqには入ってないためリストの要素を-1倍してから最小値を求めればいい -    min_a = heapq.heappop(a) * (-1) -    heapq.heappush(a, min_a // 2 * (-1)) +    q = heapq.heappop(a) +    heapq.heappush(a, int(q / 2))