import bisect

import math



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

a = [int(i) for i in input().split()]



a.sort(reverse=True)



ans=[math.ceil(-a[0]/2)]

num = 0

now = 1



if n == 1:

    print((a[0] // 2**m))

    exit()

    

for i in range(m-1):

    #print(ans[0],a[now],now,ans)

    if now >= n:

        tmp = math.ceil(ans[0] / 2)

        idx = bisect.bisect_right(ans,tmp)

        #print(ans,idx,tmp)

        ans.insert(idx,tmp)

        del ans[0]

        continue

    if ans[0] <= -a[now]:

        tmp = math.ceil(ans[0] / 2)

        idx = bisect.bisect_right(ans,tmp)

        #print(ans,idx,tmp)

        ans.insert(idx,tmp)

        del ans[0]

    else:

        ans.append(math.ceil(-a[now]/2))

        now += 1

#print(ans,ans,ans,ans)

        

if len(ans) == len(a):

    print((-sum(ans)))

    exit()

        

print((-sum(ans)+sum(a[len(ans):])))

exit()

for i in range(1,n):

 if num >= m:

   break

 if -a[i]>=ans[-1]: #i番目の要素がansの最小値以下であればansに付け加える

   ans.append(-a[i]//2)

   num+=1

 else:

   pos=bisect.bisect_right(ans,-a[i]) #i番目の要素以下の値で、最も大きい値の位置を求める

   ans[pos]=-a[i] #その位置の値をi番目の要素と置き換える



print(ans)

print((-sum(ans)))

exit()



a = [-a]

print(a)

exit()



tmp = a[0] // 2



del a[0]



idx = bisect.bisect_right(a,tmp)

a.insert(idx,tmp)

print((a,idx))

exit()



if a[0] >= a[1]:

    a[0] = a[0] // 2

else:

    a[1] = a[1] // 2

    

print(a)
import heapq

import math



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

a = [int(i) for i in input().split()]



a = [-1*num for num in a]



heapq.heapify(a)



for i in range(m):

    #1番高い商品の値段を求める

    maximum = heapq.heappop(a)

    #割引券により、半額にする

    add = math.trunc(maximum/2)

    #それをheapqにプッシュする

    heapq.heappush(a,add)



#-1をかけることを忘れずに！

print((-1 * sum(a)))
import bisect
import math

n, m = list(map(int, input().split()))
a = [int(i) for i in input().split()]
a.sort(reverse=True)
ans = [math.ceil(-a[0] / 2)]
num = 0
now = 1
if n == 1:
    print((a[0] // 2**m))
    exit()
for i in range(m - 1):
    # print(ans[0],a[now],now,ans)
    if now >= n:
        tmp = math.ceil(ans[0] / 2)
        idx = bisect.bisect_right(ans, tmp)
        # print(ans,idx,tmp)
        ans.insert(idx, tmp)
        del ans[0]
        continue
    if ans[0] <= -a[now]:
        tmp = math.ceil(ans[0] / 2)
        idx = bisect.bisect_right(ans, tmp)
        # print(ans,idx,tmp)
        ans.insert(idx, tmp)
        del ans[0]
    else:
        ans.append(math.ceil(-a[now] / 2))
        now += 1
# print(ans,ans,ans,ans)
if len(ans) == len(a):
    print((-sum(ans)))
    exit()
print((-sum(ans) + sum(a[len(ans) :])))
exit()
for i in range(1, n):
    if num >= m:
        break
    if -a[i] >= ans[-1]:  # i番目の要素がansの最小値以下であればansに付け加える
        ans.append(-a[i] // 2)
        num += 1
    else:
        pos = bisect.bisect_right(ans, -a[i])  # i番目の要素以下の値で、最も大きい値の位置を求める
        ans[pos] = -a[i]  # その位置の値をi番目の要素と置き換える
print(ans)
print((-sum(ans)))
exit()
a = [-a]
print(a)
exit()
tmp = a[0] // 2
del a[0]
idx = bisect.bisect_right(a, tmp)
a.insert(idx, tmp)
print((a, idx))
exit()
if a[0] >= a[1]:
    a[0] = a[0] // 2
else:
    a[1] = a[1] // 2
print(a)

import heapq
import math

n, m = list(map(int, input().split()))
a = [int(i) for i in input().split()]
a = [-1 * num for num in a]
heapq.heapify(a)
for i in range(m):
    # 1番高い商品の値段を求める
    maximum = heapq.heappop(a)
    # 割引券により、半額にする
    add = math.trunc(maximum / 2)
    # それをheapqにプッシュする
    heapq.heappush(a, add)
# -1をかけることを忘れずに！
print((-1 * sum(a)))

-import bisect +import heapq -a.sort(reverse=True) -ans = [math.ceil(-a[0] / 2)] -num = 0 -now = 1 -if n == 1: -    print((a[0] // 2**m)) -    exit() -for i in range(m - 1): -    # print(ans[0],a[now],now,ans) -    if now >= n: -        tmp = math.ceil(ans[0] / 2) -        idx = bisect.bisect_right(ans, tmp) -        # print(ans,idx,tmp) -        ans.insert(idx, tmp) -        del ans[0] -        continue -    if ans[0] <= -a[now]: -        tmp = math.ceil(ans[0] / 2) -        idx = bisect.bisect_right(ans, tmp) -        # print(ans,idx,tmp) -        ans.insert(idx, tmp) -        del ans[0] -    else: -        ans.append(math.ceil(-a[now] / 2)) -        now += 1 -# print(ans,ans,ans,ans) -if len(ans) == len(a): -    print((-sum(ans))) -    exit() -print((-sum(ans) + sum(a[len(ans) :]))) -exit() -for i in range(1, n): -    if num >= m: -        break -    if -a[i] >= ans[-1]:  # i番目の要素がansの最小値以下であればansに付け加える -        ans.append(-a[i] // 2) -        num += 1 -    else: -        pos = bisect.bisect_right(ans, -a[i])  # i番目の要素以下の値で、最も大きい値の位置を求める -        ans[pos] = -a[i]  # その位置の値をi番目の要素と置き換える -print(ans) -print((-sum(ans))) -exit() -a = [-a] -print(a) -exit() -tmp = a[0] // 2 -del a[0] -idx = bisect.bisect_right(a, tmp) -a.insert(idx, tmp) -print((a, idx)) -exit() -if a[0] >= a[1]: -    a[0] = a[0] // 2 -else: -    a[1] = a[1] // 2 -print(a) +a = [-1 * num for num in a] +heapq.heapify(a) +for i in range(m): +    # 1番高い商品の値段を求める +    maximum = heapq.heappop(a) +    # 割引券により、半額にする +    add = math.trunc(maximum / 2) +    # それをheapqにプッシュする +    heapq.heappush(a, add) +# -1をかけることを忘れずに！ +print((-1 * sum(a)))