namespace ABC141.D
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using static System.Console;
    using Collections;
    public class Comparer : IComparer<long>
    {
        public int Compare(long x, long y) => x >= y ? -1 : 1;
    }

    public class Program
    {

        public static void Main(string[] args)
        {
                       var l = ReadInputsAsLong().ToList();
            var n = l[0];
            var m = l[1];

            WriteLine(Solve(m,
                ReadInputsAsLong().ToList()
                ));
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="m">割引券の枚数</param>
        /// <param name="a">i番目の商品の値段</param>
        public static long Solve(long m, List<long> a)
        /// <returns></returns>
        {
            var prices = new PriorityQueue();//SortedDictionary<long, long>(new Comparer());

            for (int i = 0; i < a.Count(); i++)
            {
                //if (pricesAndCounts.ContainsKey(a[i]))
                //{
                //    pricesAndCounts[a[i]] += 1;
                //    continue;
                //}
                //pricesAndCounts.Add(a[i], 1);
                prices.Push(a[i]);
            }

            for (long i = 0; i < m; i++)
            {
                //long maxval = prices.Keys[0];
                //prices[maxval] -= 1;
                //var k = maxval / 2;
                //if (prices.ContainsKey(k)) { prices[k] += 1; }
                //else { prices.Add(k, 1); }
                //if (prices.Values[0] == 0) prices.RemoveAt(0);
                var p = prices.Top;
                prices.Pop();
                prices.Push(p / 2);
            }

            return prices.Sum();
        }

        static IEnumerable<long> ReadInputsAsLong() => ReadLine().Split(' ').Select(x => long.Parse(x));

    }
}


namespace Collections
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    /// <summary>
    /// 優先度付き待ち行列
    /// </summary>
    class PriorityQueue//<T>
     // where T : Int32,Int64,Double//IComparable<T>
    {
        #region フィールド

        //List<T> buffer;
        List<long> buffer;
        #endregion
        #region 初期化

        public PriorityQueue() { this.buffer = new List<long>(); }//<T>(); }
        public PriorityQueue(int capacity) { this.buffer = new List<long>(); }//new List<T>(capacity); }

        #endregion
        #region ヒープ操作

        /// <summary>
        /// ヒープ化されている配列リストに新しい要素を追加する。
        /// </summary>
        /// <param name="array">対象の配列リスト</param>
        static void PushHeap(List<long> array, long elem)//List<T> array, T elem)
        {
            int n = array.Count;
            array.Add(elem);

            while (n != 0)//n=4 -> i=1   [1,2,4,6][]3 .push(3)
            {
                int i = (n - 1) / 2;
                if (array[n].CompareTo(array[i]) > 0)
                {
                    var tmp = array[n]; array[n] = array[i]; array[i] = tmp;
                }
                n = i;
            }
        }

        /// <summary>
        /// ヒープから最大値を削除する。
        /// </summary>
        /// <param name="array">対象の配列リスト</param>
        static void PopHeap(List<long> array)// List<T> array)
        {
            int n = array.Count - 1;
            array[0] = array[n];
            array.RemoveAt(array.Count - 1);

            for (int i = 0, j; (j = 2 * i + 1) < n;)
            {
                if ((j != n - 1) && (array[j].CompareTo(array[j + 1]) < 0))
                    j++;
                if (array[i].CompareTo(array[j]) < 0)
                {
                    var tmp = array[j]; array[j] = array[i]; array[i] = tmp;
                }
                i = j;
            }
        }

        #endregion
        #region 要素の挿入・削除

        /// <summary>
        /// 要素のプッシュ。
        /// </summary>
        /// <param name="elem">挿入したい要素</param>
        public void Push(long elem)//public void Push(T elem)

        {
            PushHeap(this.buffer, elem);
        }

        /// <summary>
        /// 要素を1つポップ。
        /// </summary>
        /// <remarks>
        /// 今回の実装では、先頭要素の読み出しと削除は別に行う。
        /// この Pop では削除のみ。
        /// 読み出しには Top プロパティを使う。
        /// </remarks>
        public void Pop()
        {
            PopHeap(this.buffer);
        }

        /// <summary>
        /// 先頭要素の読み出し。
        /// </summary>
        public long Top//T Top
        {
            get { return this.buffer[0]; }
        }

        public int Count
        {
            get { return this.buffer.Count; }
        }

        #endregion

        public long Sum()
        {
            return buffer.Sum();
        }
    }
}

Measured memory_bytes: 31068