def get_i() #空白区切の入力を数値(整数)の配列で返す
  return gets.chomp.split(" ").map(&:to_i)
end
def get_f() #空白区切の入力を数値(実数)の配列で返す
  return gets.chomp.split(" ").map(&:to_f)
end
def get() #空白区切の入力を文字列の配列で返す
  return gets.chomp.split(" ")
end
def get_nsp() #入力されたものを一文字ずつに区切った文字列の配列で返す
  return gets.chomp.split("")
end
def yn_judge(bool,y="Yes",n="No") #boolに真偽を投げることで、trueならy、falseならnの値を出力する
  return bool ? y : n 
end
def array(size1,init=nil,size2=1) #size2に二次元配列時の最初の要素数、size1に次の配列の大きさ、initに初期値を投げることでその配列を返す
  if size2==1
    return Array.new(size1){init}
  else
    return Array.new(size2){Array.new(size1){init}}
  end
end

class SegTree
    attr_accessor:node,:n,:monoid
    def initialize(n,monoid)
        @monoid=monoid
        @n=1
        @n*=2 while @n<n
        @node=array(2*@n,@monoid)
    end

    def add(i,x)
      i+=@n
      @node[i]+=x
      while i>1
          i/=2
          @node[i]=@node[i*2]+@node[i*2+1]
      end
    end

    def get_sum(l,r)
        l+=@n
        r+=@n
        sum=@monoid
        while l<r
            if l.odd?
              sum=sum+@node[l] 
              l+=1
            end
            if r.odd?
                r-=1
                sum=sum+@node[r]
            end
            l/=2
            r/=2
        end
        return sum
    end
end

N,Q=get_i
st=SegTree.new(N,0)
Q.times do
    c,x,y=get_i
    if c.zero?
        x-=1
        st.add(x,y)
    else
        x-=1
        y-=1
        puts st.get_sum(x,y+1)
    end
end
