var
i,j,n,w,ans:longint;
a:array[0..100000]of longint;
procedure qsort(l,r:longint);
var
i,j,t,m:longint;
begin
i:=l;j:=r;
m:=a[(i+j) div 2];
repeat
while a[i]>m do inc(i);
while a[j]<m do dec(j);
if i<=j then begin
t:=a[i];a[i]:=a[j];a[j]:=t;
inc(i);dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if j>l then qsort(l,j);
end;
begin
//assign(input,'group.in');reset(input);
//assign(output,'group.out');rewrite(output);
read(w,n);
for i:=1 to n do
read(a[i]);
qsort(1,n);
{for i:=1 to n do
write(a[i],' ');}
for i:=1 to n do
begin
for j:=n downto 1 do
if (a[i]>0)and(a[j]>0) then if a[i]+a[j]<=w then begin
inc(ans);
a[i]:=0;a[j]:=0;
break;
end
else begin
inc(ans);
a[i]:=0;
break;
end
else if i=j then break;
if i=j then break;
end;
write(ans);
end.
/**************************************************************
Problem: 2269
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/