#!/usr/bin/env python3
import itertools

n, m = map(int, input().split())
g = [[] for _ in range(n)]
for _ in range(m):
    u, v = map(int, input().split())
    u -= 1
    v -= 1
    g[u].append(v)
    g[v].append(u)

special_edges = []
tree = [[] for _ in range(n)]

done = [False] * n
def dfs(u, p):
    assert not done[u]
    done[u] = True
    for v in g[u]:
        if v == p: continue
        if done[v]:
            if u < v: special_edges.append([u, v])
        else:
            tree[u].append(v)
            dfs(v, u)

dfs(0, -1)

assert len(special_edges) == m-n+1

ans = 0

#for cs in itertools.product([1,2], repeat=len(special_edges)):
for cs in range(2**len(special_edges)):
    colours = [True] * n
    for i in range(len(special_edges)):
        colours[special_edges[i][(cs>>i)&1]] = False

    # Return a pair for whether this vertex is False or (False or True).
    def dfs2(u):
        f = 0
        t = 1

        for v in tree[u]:
            fv, tv = dfs2(v)
            f += tv
            t += fv
    
        if colours[u]: t = max(t, f)
        else: t = f
        return f, t


    i = dfs2(0)[1]
    ans = max(ans, i)

print(ans)
