#include <cstdio>
#include <algorithm>
using namespace std;
const int nMax = 100001;
const int nrCul = 64;
int n, m, cul_max, nr[nrCul+1][nMax];
struct interval{ int x, y; } v[nMax];
inline bool cmp(interval a,interval b)
{ return (a.x < b.x); }
inline int bin_search(int li,int ls,int k)
{
int mij;
while (li<=ls) {
mij=(li+ls)>>1;
if (v[mij].x==k) break;
v[mij].x<k ? li=mij+1 : ls=mij-1;
}
return mij;
}
inline int bin_search_st(int li,int ls,int k)
{
int mij;
while (li<=ls) {
mij=(li+ls)>>1;
v[mij].x<k ? li=mij+1 : ls=mij-1;
}
return li;
}
inline int bin_search_dr(int li,int ls,int k)
{
int mij;
while (li<=ls) {
mij=(li+ls)>>1;
v[mij].x>k ? ls=mij-1 : li=mij+1;
}
return ls;
}
inline void sol(int li,int ls)
{
int maxim=0, i;
for (--li,i=1; i<=cul_max; ++i)
if (nr[i][ls]-nr[i][li]>maxim) maxim=nr[i][ls]-nr[i][li];
printf("%d\n",maxim);
}
void Init();
int main()
{
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
Init();
int li, ls, mij, t, x, y, i;
for (i=1; i<=m; ++i) {
scanf("%d%d%d",&t,&x,&y);
if (!t) {
mij = bin_search(1,n,x);
v[mij].x+=y;
}
else {
li = bin_search_st(1,n,x);
ls = bin_search_dr(1,n,y);
sol(li,ls);
}
}
return 0;
}
void Init()
{
scanf("%d%d",&n,&m);
int i, j;
for (i=1; i<=n; ++i){
scanf("%d%d",&v[i].x,&v[i].y);
if (v[i].y>cul_max) cul_max=v[i].y;
}
sort(v+1,v+n+1,cmp);
for (i=1; i<=n; ++i)
for (j=1; j<=cul_max; ++j) nr[j][i]=nr[j][i-1]+(v[i].y==j);
}