#include <iostream>
using namespace std;
int p[1000005];
int n, m, mx, a, b;
int find_root(int x){
if (p[x] < 0) return x;
else {
p[x] = find_root(p[x]);
return p[x];
}
}
int main() {
while (cin >> n >> m){
for (int i = 0; i < n; i++){
p[i] = -1; // 初始化
}
mx = 1;
for (int i = 0; i < m; i++){
cin >> a >> b;
a = find_root(a);
b = find_root(b);
if (a != b){ // 不同才能加
p[a] += p[b]; // 加總
mx = max(mx, -p[a]); // 順道紀錄最大值
p[b] = a; // 合併
}
}
cout << mx << "\n";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgcFsxMDAwMDA1XTsKaW50IG4sIG0sIG14LCBhLCBiOwogCmludCBmaW5kX3Jvb3QoaW50IHgpewogICAgaWYgKHBbeF0gPCAwKSByZXR1cm4geDsgCiAgICBlbHNlIHsKICAgICAgICBwW3hdID0gZmluZF9yb290KHBbeF0pOyAKICAgICAgICByZXR1cm4gcFt4XTsKICAgIH0KfQogCmludCBtYWluKCkgewogICAgd2hpbGUgKGNpbiA+PiBuID4+IG0pewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICAgICAgcFtpXSA9IC0xOyAvLyDliJ3lp4vljJYKICAgICAgICB9CiAgICAgICAgbXggPSAxOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKXsKICAgICAgICAgICAgY2luID4+IGEgPj4gYjsKICAgICAgICAgICAgYSA9IGZpbmRfcm9vdChhKTsKICAgICAgICAgICAgYiA9IGZpbmRfcm9vdChiKTsKICAgICAgICAgICAgaWYgKGEgIT0gYil7IC8vIOS4jeWQjOaJjeiDveWKoAogICAgICAgICAgICAgICAgcFthXSArPSBwW2JdOyAvLyDliqDnuL0KICAgICAgICAgICAgICAgIG14ID0gbWF4KG14LCAtcFthXSk7IC8vIOmghumBk+e0gOmMhOacgOWkp+WAvAogICAgICAgICAgICAgICAgcFtiXSA9IGE7IC8vIOWQiOS9tQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgbXggPDwgIlxuIjsKICAgIH0KfQ==