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';
}