//NiceDuck
#include "bits/stdc++.h"
typedef long long ll;
using namespace std;
#define FILE "000"
#define foru(i,a,b) for(int i=(int)(a); i<=(int)(b); ++i)
#define ford(i,a,b) for(int i=(int)(a); i>=(int)(b); --i)
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);
#define pb push_back
#define fi first
#define se second
#define el "\n"
#define MASK(i) (1LL<<(i))
#define BIT(i,j) (((i)>>(j))&1)
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define LOG 20

const ll MAX=2e5+5;
int n,q,cnt;
struct Dsu
{
    vector<pair<int,int> > history;
    int par[MAX],sz[MAX];
    void init()
    {
        foru(i,1,n)
        {
            par[i]=i;
            sz[i]=1;
        }
    }
    int find_par(int x)
    {
        while(x!=par[x]) x=par[x];
        return x;
    }
    int join(int u, int v)
    {
        u=find_par(u); v=find_par(v);
        if(u==v)
        {
            history.pb({-1,-1});
            return 0;
        }
        if(sz[u]<sz[v]) swap(u,v);
        history.pb({v,sz[u]});
        sz[u]+=sz[v];
        par[v]=u;
        return -1;
    }
    int rollback(int ver)
    {
        int res=0;
        while((int)history.size()>ver)
        {
            pair<int,int> pa=history.back();
            history.pop_back();
            if(pa.fi==-1) continue;
            int v=pa.fi, old=pa.se;
            int u=par[v];
            sz[u]=old;
            par[v]=v;
            ++res;
        }
        return res;
    }
} dsu;

int main()
{
    fastio
    if(fopen(FILE ".inp","r"))
    {
        freopen(FILE ".inp","r",stdin); freopen(FILE ".out","w",stdout);
    }
    cin>>n>>q;
    cnt=n;
    dsu.init();
    cin.ignore();
    vector<int> v;
    v.clear();
    while(q--)
    {
        string str; cin>>str;
        if(str=="persist") v.pb(dsu.history.size());
        else if(str=="union")
        {
            int u,v; cin>>u>>v;
            cnt+=dsu.join(u,v);
            cout<<cnt<<el;
        }
        else
        {
            int x=v.back();
            cnt+=dsu.rollback(x);
            cout<<cnt<<el;
            v.pop_back();
        }
    }
    return 0;
}
