code: def __query(self, i, L, R, l, r):
      if l > R or r < L or L > R or l > r:
          return None
      if L >= l and R <= r:
          return self.segment[i]
      val1 = self.__query(2 * i + 1, L, int((L + R) / 2), l, r)
      val2 = self.__query(2 * i + 2, int((L + R + 2) / 2), R, l, r)
      print(L, R, " returned ", val1, val2)
      if val1 != None:
          if val2 != None:
              return self.fn(val1, val2)
          return val1
      return val2
  
label_desc: Use image node_id 3 for calling the SegmentTree obj's underlying member method code with example usage: obj.__query(i, L, R, l, r) and returns: val2, None, self, val1, self