#include<bits/stdc++.h>
using namespace std;

int n, cc, q;
bool niz[200010];
struct Segm{
    int broj, lazy;
} st[800010];
void propagate(int node, int tl, int tr) {
    if(st[node].lazy&1) {
        st[node].broj=(tr-tl+1)-st[node].broj;
        st[node].lazy=1;
        if(tl<tr) {
            ++st[2*node].lazy;
            ++st[2*node+1].lazy;
        }
        st[node].lazy=0;
    }
    else st[node].lazy=0;
}
void build(int node, int tl, int tr) {
    if(tl==tr) {st[node].broj=niz[tl]; return;}
    int mid=(tl+tr)/2;
    build(2*node, tl, mid);
    build(2*node+1, mid+1, tr);
    st[node].broj=st[2*node].broj+st[2*node+1].broj;
}
void update(int node, int tl, int tr, int gl, int gr) {
    propagate(node, tl, tr);
    if (tl>=gl && tr<=gr) {++st[node].lazy; return;}
    int mid=(tl+tr)/2;
    if (gl<=mid) update(2*node, tl, mid, gl, gr);
    if (gr>=mid+1) update(2*node+1, mid+1, tr, gl, gr);
    propagate(2*node, tl, mid);
    propagate(2*node+1, mid+1, tr);
    st[node].broj = st[2*node].broj+st[2*node+1].broj;
}
int query(int node, int tl, int tr, int gl, int gr) {
    propagate(node, tl, tr);
    if(tl>=gl && tr<=gr) return st[node].broj;
    int uk=0;
    int mid=(tl+tr)/2;
    if(gl<=mid) uk+=query(2*node, tl, mid, gl, gr);
    if(gr>=mid+1) uk+=query(2*node+1, mid+1, tr, gl, gr);
    return uk;
}
bool boja;
set<pair<int, int>> skup;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin >> n >> cc >> q;
    if(cc==n) {
        /// optimalno je da okrecemo jedan po jedan -> resenje je broj keceva u nizu

        for(int i=1; i<=n; ++i) {
            char c; cin >> c;
            niz[i]=c-'0';
        }
        build(1, 1, n);
        while(q--) {
            int l, r; cin >> l >> r;
            update(1, 1, n, l, r);
            cout << query(1, 1, n, 1, n) << "\n";
        }
    }
    else if(cc==1) {
        /// delimo niz na uzastopne keceve i nule, broj segmenata sa kecevima je resenje:

        int poc=1, kraj=1;
        skup.emplace(make_pair(n+1, n+1)); /// dummy
        for(int i=1; i<=n; ++i) {
            char c; cin >> c;
            niz[i]=c-'0';
            if(i>1) {
                if(niz[i]==niz[i-1]) {
                    kraj=i;
                }
                else {
                    skup.emplace(make_pair(poc, kraj));
                    poc=i;
                    kraj=i;
                }
            }
        }
        skup.emplace(make_pair(poc, kraj));
        boja=niz[1];
        while(q--) {
            int l, r; cin >> l >> r;

            auto it1=skup.lower_bound(make_pair(l, 0));
            if((*it1).first==l) {
                if(l==1) {
                    boja=!boja;
                }
                else {
                    int pr=(*prev(it1)).first;
                    int dr=(*it1).second;
                    auto novi1=it1;
                    --novi1;
                    skup.erase(it1);
                    skup.erase(novi1);
                    skup.emplace(make_pair(pr, dr));
                }
            }
            else {
                it1=prev(it1);
                int pr=(*it1).first;
                int dr=(*it1).second;
                skup.erase(it1);
                skup.emplace(make_pair(pr, l-1));
                skup.emplace(make_pair(l, dr));
            }

            auto it2=skup.lower_bound(make_pair(r+1, 0));
            if((*it2).first-1!=r) {
                it2=prev(it2);
                int pr=(*it2).first;
                int dr=(*it2).second;
                skup.erase(it2);
                skup.emplace(make_pair(pr, r));
                skup.emplace(make_pair(r+1, dr));
            }
            else {
                int pr=(*prev(it2)).first;
                int dr=(*it2).second;
                auto novi2=it2;
                --novi2;
                skup.erase(it2);
                skup.erase(novi2);
                skup.emplace(make_pair(pr, dr));
            }
            cout << ((int)skup.size()+(int)(boja)-1)/2 << "\n";
            /*for(auto itt=skup.begin(); itt!=skup.end(); ++itt) {
                cout << (*itt).first << ' ' << (*itt).second << "  ";
            }
            cout << endl;*/
        }
    }
    /*else {
        /// n^2
        for(int i=1; i<=n; ++i) {
            char c; cin >> c;
            niz[i]=c-'0';
            if(i>1) {
                if(niz[i]==niz[i-1]) {
                    kraj=i;
                }
                else {
                    skup.emplace(make_pair(poc, kraj));
                    poc=i;
                    kraj=i;
                }
            }
        }
    }*/
}
/*
7 1 3
0111011
1 2
1 2
2 6
*/