import heapq as hq # 堆 优先队列(最大堆最小堆)
w = int(input())#每组纪念品价格之和的上限
n = int(input())#购来的纪念品的总件数G
a = []#正数小到大
c = []#负数小到大
cnt = 0 #记录组数
sum = 0 #记录总共取了多少数
for i in range(n): # 存入 a
hq.heapify(a)
hq.heappush(a,int(input()))
c = list(map(lambda x:x*(-1),a)) # a 每个数都乘以 -1 再存入 c
hq.heapify(c)
def jn(w):
global cnt
global sum
if sum < n:
min = hq.heappop(a) #最小值
max = hq.heappop(c)*(-1) #最大值
if min+max > w: # 如果最大跟最小和超过上限,把最大单独一组,最小放回去
cnt += 1
hq.heappush(a,min)
sum += 1
jn(w)
else: # 如果最大跟最小和没有超过上限,则两数作为一组,
cnt += 1
sum += 2
jn(w)
jn(w)
print(cnt)