#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define el "\n"
#define _ROOT_ int main()
#pragma GCC optimize("O2")
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 1000001
#define PI acos(-1)
#define INF (1ll<<30)
#define BLOCK_SIZE 425
#define LOG 19
#define BASE 256
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
ll n, q, scc, m ;
ll res[MAXN] ;
ll arr[MAXN];
pair<ll,ll> edge[MAXN] ;
ll lab[MAXN] ;
struct Data {
ll u, sz ;
};
stack<Data> his ;
struct Query {
ll l, r, id ;
bool operator < (const Query & other ) const {
ll blA= l / BLOCK_SIZE, blB = other.l / BLOCK_SIZE ;
if(blA == blB) return r < other.r;
return blA < blB ;
}
};
vector<Query > que ;
void reset() {
FOR(i, 0, n ) lab[i] = -1 ;
while(!his.empty()) his.pop() ;
scc = n ;
}
ll find_set(ll a ) {
return lab[a] < 0 ? a : find_set(lab[a]) ;
}
void roll_back() {
scc += his.size() / 2;
while(!his.empty() ) {
Data u = his.top() ;
his.pop() ;
lab[u.u] = u.sz ;
}
}
bool union_set(ll u, ll v, ll snapshot ) {
u = find_set(u) ;
v = find_set(v) ;
if(u == v ) return false ;
if(lab[u] > lab[v]) swap(u, v ) ;
if(snapshot ) his.push({u, lab[u] }) ;
if(snapshot ) his.push({v, lab[v] }) ;
lab[u] += lab[v] ;
lab[v]= u ;
scc -- ;
return true ;
}
void init() {
cin>> n >> m ;
FOR(i, 1, m ) cin >> edge[i].fi >> edge[i].se ;
cin >> q;
FOR(i, 1, q ) {
ll l, r, id ;
cin >> l >> r;
que.push_back({l, r,i });
}
}
void solve() {
sort(que.begin(), que.end() ) ;
ll curBlock = -1 ;
ll curR = - 1;
for(auto [l, r, id ] : que ) {
ll block = l / BLOCK_SIZE ;
if(block != curBlock ) {
reset() ;
curBlock= block ;
curR = (block + 1) * BLOCK_SIZE ;
}
while(curR <= r ) union_set(edge[curR].fi, edge[curR].se, 0 ), curR ++ ;
ll EndBlockL = min( { (block + 1 ) * BLOCK_SIZE - 1 , m, r } ) ;
// cout << l << " " << EndBlockL << " " << id << el ;
FOR(i, l, EndBlockL) union_set(edge[i].fi, edge[i].se, 1 ) ;
res[id] = scc ;
roll_back() ;
}
FOR(i, 1, q ) cout << res[i] << el ;
}
_ROOT_ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
srand(time(nullptr)) ;
int t = 1; // cin >> t ;
while(t--) {
init();
solve();
}
return (0&0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgX1JPT1RfIGludCBtYWluKCkKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk8yIikKI2RlZmluZSBGT1IoaSxsLHIpIGZvcihpbnQgaSA9IGwgOyBpIDw9IHIgOyBpICsrKQojZGVmaW5lIEZPUkQoaSxyLGwpIGZvcihpbnQgaSA9IHIgOyBpID49IGwgOyBpIC0tKQojZGVmaW5lIFJFUChpLCBhICkgZm9yKGludCBpID0gMCA7IGkgPCBhIDsgaSArKyApCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBNIDEwMDAwMDAwMDcKI2RlZmluZSBNQVhOIDEwMDAwMDEKI2RlZmluZSBQSSBhY29zKC0xKQojZGVmaW5lIElORiAoMWxsPDwzMCkKI2RlZmluZSBCTE9DS19TSVpFIDQyNQojZGVmaW5lIExPRyAxOQojZGVmaW5lIEJBU0UgMjU2CiNkZWZpbmUgTkFNRSAiZmlsZSIKI2RlZmluZSBjb21wYXJlKHYpIHNvcnQoKHYpLmJlZ2luKCksICh2KS5lbmQoKSk7ICh2KS5lcmFzZSh1bmlxdWUoKHYpLmJlZ2luKCksICh2KS5lbmQoKSksICh2KS5lbmQoKSk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIE1PRFtdID0geyhsbCkxZTkgKyAyMjc3LCAobGwpMWU5ICsgNTI3NywgKGxsKTFlOSArIDgyNzcsIChsbCkxZTkgKyA5Mjc3LCAobGwpIDFlOSArIDcgfTsKY29uc3QgbGwgTk1PRCA9IDE7CgpsbCBuLCBxLCBzY2MsIG0gIDsKbGwgcmVzW01BWE5dIDsKbGwgYXJyW01BWE5dOwpwYWlyPGxsLGxsPiBlZGdlW01BWE5dIDsKbGwgbGFiW01BWE5dIDsKCnN0cnVjdCBEYXRhIHsKICAgIGxsIHUsIHN6IDsKfTsKc3RhY2s8RGF0YT4gaGlzIDsKc3RydWN0IFF1ZXJ5IHsKICAgIGxsIGwsIHIsIGlkIDsKICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgUXVlcnkgJiBvdGhlciApIGNvbnN0IHsKICAgICAgICBsbCBibEE9IGwgLyBCTE9DS19TSVpFLCBibEIgPSBvdGhlci5sIC8gQkxPQ0tfU0laRSA7CiAgICAgICAgaWYoYmxBID09IGJsQikgcmV0dXJuIHIgPCBvdGhlci5yOwogICAgICAgIHJldHVybiBibEEgPCBibEIgOwogICAgfQp9Owp2ZWN0b3I8UXVlcnkgPiBxdWUgOwp2b2lkIHJlc2V0KCkgewogICAgRk9SKGksIDAsIG4gKSBsYWJbaV0gPSAtMSA7CiAgICB3aGlsZSghaGlzLmVtcHR5KCkpIGhpcy5wb3AoKSA7CiAgICBzY2MgPSBuIDsKfQoKbGwgZmluZF9zZXQobGwgYSApIHsKICAgIHJldHVybiBsYWJbYV0gPCAwID8gYSA6IGZpbmRfc2V0KGxhYlthXSkgIDsKfQp2b2lkIHJvbGxfYmFjaygpIHsKICAgIHNjYyArPSBoaXMuc2l6ZSgpIC8gMjsKICAgIHdoaWxlKCFoaXMuZW1wdHkoKSApIHsKICAgICAgICBEYXRhIHUgPSBoaXMudG9wKCkgOwogICAgICAgIGhpcy5wb3AoKSA7CiAgICAgICAgbGFiW3UudV0gPSB1LnN6IDsKICAgIH0KfQpib29sIHVuaW9uX3NldChsbCB1LCBsbCB2LCBsbCBzbmFwc2hvdCApIHsKICAgIHUgPSBmaW5kX3NldCh1KSA7CiAgICB2ID0gZmluZF9zZXQodikgOwogICAgaWYodSA9PSB2ICkgcmV0dXJuIGZhbHNlIDsKICAgIGlmKGxhYlt1XSA+IGxhYlt2XSkgc3dhcCh1LCB2ICkgOwogICAgaWYoc25hcHNob3QgKSBoaXMucHVzaCh7dSwgbGFiW3VdIH0pIDsKICAgIGlmKHNuYXBzaG90ICkgaGlzLnB1c2goe3YsIGxhYlt2XSB9KSA7CiAgICBsYWJbdV0gKz0gbGFiW3ZdIDsKICAgIGxhYlt2XT0gIHUgOwogICAgc2NjIC0tIDsKICAgIHJldHVybiB0cnVlIDsKfQp2b2lkIGluaXQoKSB7CiAgICBjaW4+PiBuID4+IG0gIDsKICAgIEZPUihpLCAxLCBtICkgY2luID4+IGVkZ2VbaV0uZmkgPj4gZWRnZVtpXS5zZSA7CiAgICBjaW4gPj4gcTsKICAgIEZPUihpLCAxLCBxICkgewogICAgICAgIGxsIGwsIHIsIGlkIDsKICAgICAgICBjaW4gPj4gbCA+PiByOwogICAgICAgIHF1ZS5wdXNoX2JhY2soe2wsIHIsaSB9KTsKICAgIH0KfQoKdm9pZCBzb2x2ZSgpIHsKCiAgICBzb3J0KHF1ZS5iZWdpbigpLCBxdWUuZW5kKCkgKSA7CiAgICBsbCBjdXJCbG9jayA9IC0xIDsKICAgIGxsIGN1clIgID0gLSAxOwogICAgZm9yKGF1dG8gW2wsIHIsIGlkIF0gOiBxdWUgKSB7CiAgICAgICAgbGwgYmxvY2sgPSBsIC8gQkxPQ0tfU0laRSA7CiAgICAgICAgaWYoYmxvY2sgIT0gY3VyQmxvY2sgKSB7CiAgICAgICAgICAgIHJlc2V0KCkgOwogICAgICAgICAgICBjdXJCbG9jaz0gYmxvY2sgOwogICAgICAgICAgICBjdXJSID0gKGJsb2NrICsgMSkgKiBCTE9DS19TSVpFIDsKICAgICAgICB9CiAgICAgICAgd2hpbGUoY3VyUiA8PSByICkgdW5pb25fc2V0KGVkZ2VbY3VyUl0uZmksIGVkZ2VbY3VyUl0uc2UsIDAgKSwgY3VyUiArKyAgOwogICAgICAgIGxsIEVuZEJsb2NrTCA9IG1pbiggeyAgKGJsb2NrICsgMSApICogQkxPQ0tfU0laRSAtIDEgLCBtLCByIH0gKSAgOwovLyAgICAgICAgY291dCA8PCBsIDw8ICIgIiA8PCBFbmRCbG9ja0wgPDwgIiAiIDw8IGlkICA8PCBlbCA7CiAgICAgICAgRk9SKGksIGwsICBFbmRCbG9ja0wpIHVuaW9uX3NldChlZGdlW2ldLmZpLCBlZGdlW2ldLnNlLCAxICkgOwogICAgICAgIHJlc1tpZF0gPSBzY2MgOwogICAgICAgIHJvbGxfYmFjaygpIDsKICAgIH0KICAgIEZPUihpLCAxLCAgcSApIGNvdXQgPDwgcmVzW2ldIDw8IGVsIDsKfQoKX1JPT1RfIHsKICAgIC8vIGZyZW9wZW4oTkFNRSIuaW5wIiAsICJyIiAsIHN0ZGluKTsKICAgIC8vIGZyZW9wZW4oTkFNRSIub3V0IiAsICJ3Iiwgc3Rkb3V0KSA7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgc3JhbmQodGltZShudWxscHRyKSkgOwogICAgaW50IHQgPSAxOyAvLyBjaW4gPj4gdCA7CiAgICB3aGlsZSh0LS0pIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAoMCYwKTsKfQo=