#include<bits/stdc++.h>
using namespace std;
#define p2 (p<<1)
#define p3 (p<<1|1)
const int N=5e5+7;
struct node{
int l,r,sum,tag;
}tr[N];
int n,m;
void pushup(int p){
tr[p].sum=tr[p2].sum+tr[p3].sum;
}
void pushdown(int p){
tr[p2].tag+=tr[p].tag;
tr[p3].tag+=tr[p].tag;
tr[p2].sum+=tr[p2].tag*(tr[p2].r-tr[p2].l+1);
tr[p3].sum+=tr[p3].tag*(tr[p3].r-tr[p3].l+1);
tr[p].tag=0;
}
void build(int p,int l,int r){
tr[p].l=l,tr[p].r=r;
if(l==r){
tr[p].sum=0;
return;
}
int mid=l+r>>1;
build(p2,l,mid);
build(p3,mid+1,r);
pushup(p);
}
void upd(int p,int l,int r){
if(tr[p].l>=l&&tr[p].r<=r){
tr[p].sum+=(tr[p].r-tr[p].l+1);
tr[p].tag++;
return;
}
pushdown(p);
int mid=tr[p].l+tr[p].r>>1;
if(l<=mid) upd(p2,l,r);
if(r>mid) upd(p3,l,r);
pushup(p);
}
bool query(int p,int x){
if(tr[p].l==tr[p].r&&tr[p].l==x){
return tr[p].sum&1;
}
pushdown(p);
int mid=tr[p].l+tr[p].r>>1;
if(x<=mid) return query(p2,x);
if(x>mid) return query(p3,x);
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
build(1,1,n);
while(m--){
int op;
cin>>op;
if(op==1){
int l,r;
cin>>l>>r;
upd(1,l,r);
}
else{
int x;
cin>>x;
int z=query(1,x);
cout<<z<<'\n';
}
}
return 0;
}