n, m = gets.split.map(&:to_i)
gidx = []
g = []
mg_idx = 0
m.times do
  a, b = gets.split.map(&:to_i)
  if gidx[a-1] && !gidx[b-1]
    gidx[b-1] = gidx[a-1]
    g[gidx[a-1]] << b-1
  elsif !gidx[a-1] && gidx[b-1]
    gidx[a-1] = gidx[b-1]
    g[gidx[b-1]] << a-1
  elsif gidx[a-1] && gidx[b-1]
    next if gidx[a-1] == gidx[b-1]

    if g[gidx[a-1]].size > g[gidx[b-1]].size
      g[gidx[b-1]].each do |ggidx|
        gidx[ggidx] = gidx[a-1]
      end
      g[gidx[b-1]] = []
    else
      g[gidx[a-1]].each do |ggidx|
        gidx[ggidx] = gidx[b-1]
      end
      g[gidx[a-1]] = []
    end
  else
    g[mg_idx] = [a-1, b-1]
    gidx[a-1] = gidx[b-1] = mg_idx
    mg_idx += 1
  end
end
puts g.map{_1.count}.max