One day n students come to the stadium. They want to play football, and for that they need to split into teams, the teams must have an equal number of people.

We know that this group of people has archenemies. Each student has at most two archenemies. Besides, if student A is an archenemy to student B, then student B is an archenemy to student A.

The students want to split so as no two archenemies were in one team. If splitting in the required manner is impossible, some students will have to sit on the bench.

Determine the minimum number of students you will have to send to the bench in order to form the two teams in the described manner and begin the game at last.

Input

The first line contains two integers n and m (2 ≤ n ≤ 100, 1 ≤ m ≤ 100) — the number of students and the number of pairs of archenemies correspondingly.

Next m lines describe enmity between students. Each enmity is described as two numbers ai and bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — the indexes of the students who are enemies to each other. Each enmity occurs in the list exactly once. It is guaranteed that each student has no more than two archenemies.

You can consider the students indexed in some manner with distinct integers from 1 to n.

Output

Print a single integer — the minimum number of students you will have to send to the bench in order to start the game.

Examples

Input

5 4
1 2
2 4
5 3
1 4


Output

1

Input

6 2
1 4
3 4


Output

0

Input

6 6
1 2
2 3
3 1
4 5
5 6
6 4


Output

2
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
import java.util.Locale;
import java.io.OutputStream;
import java.util.RandomAccess;
import java.io.PrintWriter;
import java.util.AbstractList;
import java.io.Writer;
import java.util.Collection;
import java.util.List;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Iterator;
import java.math.BigInteger;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 * @author Jacob Jiang
 */
public class Main {
	public static void main(String[] args) {
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		InputReader in = new InputReader(inputStream);
		OutputWriter out = new OutputWriter(outputStream);
		TaskB solver = new TaskB();
		solver.solve(1, in, out);
		out.close();
	}
}

class TaskB {
	public void solve(int testNumber, InputReader in, OutputWriter out) {
        int n = in.nextInt();
        int m = in.nextInt();
        int[] from = new int[m];
        int[] to = new int[m];
        ArrayUtils.readIntArrays(in, from, to);
        ArrayUtils.decreaseByOne(from, to);
        Graph graph = new BidirectionalFixedGraph(n, from, to);
        boolean[] visited = new boolean[n];
        int answer = 0;
        for (int i = 0; i < n; i++) {
            if (!visited[i]) {
                int circleCount = 1;
                boolean isCircle = false;
                int current = i;
                while (true) {
                    int next = -1;
                    for (Edge edge : graph.getConnectedEdges(current)) {
                        if (!visited[edge.getDestination()] && !(circleCount == 2 && edge.getDestination()== i)) {
                            next = edge.getDestination();
                        }
                    }
                    if (next == -1) break;
                    if (next == i) {
                        isCircle = true;
                        break;
                    }
                    circleCount++;
                    current = next;
                    visited[current] = true;
                }
                visited[i] = true;
                if (isCircle && circleCount > 1 && circleCount % 2 == 1) answer++;
            }
        }
        if ((n - answer) % 2 == 1) answer++;
        out.println(answer);
    }
}

class InputReader {

    private InputStream stream;
    private byte[] buf = new byte[1 << 20];
    private int curChar;
    private int numChars;

    public InputReader(InputStream stream) {
        this.stream = stream;
    }

    public int read() {
        if (numChars == -1)
            throw new InputMismatchException();
        if (curChar >= numChars) {
            curChar = 0;
            try {
                numChars = stream.read(buf);
            } catch (IOException e) {
                throw new InputMismatchException();
            }
            if (numChars <= 0)
                return -1;
        }
        return buf[curChar++];
    }

    public int nextInt() {
        int c = read();
        while (isSpaceChar(c))
            c = read();
        int sgn = 1;
        if (c == '-') {
            sgn = -1;
            c = read();
        }
        int res = 0;
        do {
            if (c < '0' || c > '9')
                throw new InputMismatchException();
            res *= 10;
            res += c & 15;
            c = read();
        } while (!isSpaceChar(c));
        return res * sgn;
    }

    public static boolean isSpaceChar(int c) {
        return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
    }

    }

class OutputWriter {
    private PrintWriter writer;

    public OutputWriter(OutputStream stream) {
        writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(stream)));
    }

    public OutputWriter(Writer writer) {
        this.writer = new PrintWriter(writer);
    }

    public void println(int x) {
        writer.println(x);
    }

    public void close() {
        writer.close();
    }

    }

class ArrayUtils {

    public static void readIntArrays(InputReader in, int[]... arrays) {
        for (int i = 0; i < arrays[0].length; i++) {
            for (int j = 0; j < arrays.length; j++) {
                arrays[j][i] = in.nextInt();
            }
        }
    }

    public static void decreaseByOne(int[]... arrays) {
        for (int[] array : arrays) {
            for (int i = 0; i < array.length; i++) {
                array[i]--;
            }
        }
    }

    }

interface Graph {
    Iterable<Edge> getConnectedEdges(int vertexNo);
    }

class BidirectionalFixedGraph extends FixedGraph {
    public BidirectionalFixedGraph(int vertexCount, int[] from, int[] to) {
        if (from.length != to.length) {
            throw new IllegalArgumentException();
        }
        edges = new int[vertexCount][];
        int[] degree = new int[vertexCount];
        for (int i = 0; i < from.length; i++) {
            degree[from[i]]++;
            degree[to[i]]++;
        }
        for (int i = 0; i < vertexCount; i++) {
            edges[i] = new int[degree[i]];
        }
        for (int i = 0; i < from.length; i++) {
            edges[from[i]][--degree[from[i]]] = to[i];
            edges[to[i]][--degree[to[i]]] = from[i];
        }
    }
}

interface Edge {
    public int getDestination();
    }

abstract class FixedGraph implements Graph {
    protected int[][] edges;

    public Iterable<Edge> getConnectedEdges(final int vertexNo) {
        return new Iterable<Edge>() {
            @Override
            public Iterator<Edge> iterator() {
                return getConnectedEdgesIterator(vertexNo);
            }
        };
    }

    protected Iterator<Edge> getConnectedEdgesIterator(final int vertexNo) {
        return new Iterator<Edge>() {
            int current = 0;
            @Override
            public boolean hasNext() {
                return current < edges[vertexNo].length;
            }

            @Override
            public Edge next() {
                return new SimpleEdge(vertexNo, edges[vertexNo][current++]);
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }
        };
    }
}

class SimpleEdge implements Edge {
    protected int source, destination;

    public SimpleEdge(int source, int destination) {
        this.source = source;
        this.destination = destination;
    }

    public int getDestination() {
        return destination;
    }

    public String toString() {
        return "(" + source + "->" + destination + ")";
    }
}

