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
****************************************************************/