Link to this code:
https://cses.fi/paste/231992f809c4e7fca11b88/#include<bits/stdc++.h>
using namespace std;
#define IOS cin.tie(nullptr)->sync_with_stdio(0),cin.exceptions(cin.failbit);
#define lb(x) (x)&-(x)
#define all(x) (x).begin(),(x).end()
#define ll long long
constexpr int maxN=2e5+5;
struct DSU{
int n,cnt,biggest;
vector<int> dsu;
DSU(int _):n(_),cnt(_),biggest(-1),dsu(_+1,-1){}
inline int find(int pos){
return dsu[pos]<0?pos:(dsu[pos] = find(dsu[pos]));
}
inline void merge(int a,int b){
a = find(a),b = find(b);
if(a==b)return;
cnt--;
if(dsu[a]<dsu[b])swap(a,b);
dsu[b]+=dsu[a],dsu[a]=b;
if(dsu[b]<biggest)biggest = dsu[b];
}
};
int n,m;
int main(){
cin>>n>>m;
DSU uf = DSU(n);
for(int a,b;m--;)cin>>a>>b,uf.merge(a,b),cout<<uf.cnt<<' '<<-uf.biggest<<'\n';
}