#include <bits/stdc++.h>
using namespace std;
int n, m, op, l , r, f[800005], a[200005];
char ch;
void maketree( int k , int l , int r )
{
if( l == r )
{
f[k] = a[l];
return;
}
int m = (l + r) / 2;
maketree( k * 2 , l , m );
maketree( k * 2 + 1 , m + 1 , r );
f[k] = f[2 * k] + f[2 * k + 1];
}
void add( int k, int bl, int br , int l , int r )
{
if( bl == l && br == r )
{
f[k] = (r - l + 1) - f[k];
return;
}
if( l == r )
{
f[k] = !f[k];
return;
}
int m = (bl + br) / 2;
if( r <= m ) add( k * 2 , bl , m , l , r );
else
if( l > m )
add( k * 2 + 1 , m + 1 , br , l , r );
else add( k * 2 , bl , m , l , m ) , add( k * 2 + 1 , m + 1 , br , m + 1 , r );
}
int fun( int k, int bl, int br , int l , int r )
{
if( bl == l && br == r )
{
return f[k];
}
int m = (bl + br) / 2;
if( r <= m ) return fun( k * 2 , bl , m , l , r );
else
if( l > m )
return fun( k * 2 + 1 , m + 1 , br , l , r );
else return fun( k * 2 , bl , m , l , m ) + fun( k * 2 + 1 , m + 1 , br , m + 1 , r );
}
int main()
{
cin >> n >> m;
for( int i = 1 ; i <= n ; i ++ )
{
cin >> ch;
a[i] = ch - '0';
}
maketree( 1 , 1 , n );
for( int i = 1 ; i <= m ; i ++ )
{
cin >> op >> l >> r;
if( op == 0 )
{
add( 1 , 1 , n , l , r );
}
else
{
cout << fun( 1 , 1 , n , l , r ) << endl;
}
}
return 0;
}