{Author: I.Oleynikov} program eylerpath; type ptrnode=^pnode; pnode=record d:longint; next:ptrnode; end; var a:array[1..40000] of ptrnode; block,red,q,blocks:array[0..40000] of longint; i,j,k,l,n,m,v,r:longint; temp:ptrnode; f1,f2:text; function pop:longint; begin pop:=q[l]; inc(l); end; procedure push(v:longint); begin q[r]:=v; inc(r); end; begin assign(f1,'input.txt'); assign(f2,'output.txt'); reset(f1); rewrite(f2); read(f1,n,m); for i:=1 to n do begin block[i]:=0; red[i]:=0; blocks[i]:=0; end; for i:=1 to m do begin read(f1,l,k); new(temp); temp^.d:=k; temp^.next:=a[l]; a[l]:=temp; inc(block[l]); inc(block[k]); new(temp); temp^.d:=l; temp^.next:=a[k]; a[k]:=temp; end; l:=1; r:=1; j:=1; for i:=1 to n do begin if red[i]<>0 then continue; push(i); red[i]:=j; while l<>r do begin v:=pop; temp:=a[v]; while temp<>nil do begin if red[temp^.d]=0 then begin red[temp^.d]:=j; push(temp^.d); end; temp:=temp^.next; end; end; inc(j); end; dec(j); for i:=1 to n do begin if (block[i] mod 2)<>0 then inc(blocks[red[i]]); end; k:=0; for i:=1 to j do k:=k+(blocks[i] div 2); writeln(f2,k); close(f1); close(f2); end.