FAST_IO = 1
if FAST_IO:
    import io, sys, atexit
    rr = iter(sys.stdin.read().splitlines()).next
    sys.stdout = _OUTPUT_BUFFER = io.BytesIO()
    @atexit.register
    def write():
        sys.__stdout__.write(_OUTPUT_BUFFER.getvalue())
else:
    rr = raw_input
rri = lambda: int(rr())
rrm = lambda: map(int, rr().split())

####
from collections import defaultdict as ddic
N,Q = rrm()
A = rrm()
A.sort()

MOD = 998244353
poly = [1]  # reverse order, MSB -> LSB
for i, c in enumerate(A): A[i] -= 1
for a in A:
    # multiply by x + a

    poly.append(0)
    for i in xrange(len(poly) - 2, -1, -1):
        poly[i+1] += a * poly[i]
        poly[i+1] %= MOD
    poly[0] %= MOD

polys = [poly[:]]
for a in A:
    # Divide by x + a
    quot = []
    for i in xrange(len(poly) - 1):
        coeff = poly[i]
        quot.append(coeff)
        poly[i+1] -= a * coeff % MOD
        poly[i+1] %= MOD
    poly = quot
    # multiply by a + 1
    #poly.append(0)
    for i in xrange(len(poly)):
        poly[i] *= a+1
        poly[i] %= MOD
    polys.append(poly[:])

#print("!", polys)
#print(len(polys))
for _ in xrange(Q):
    l, r, p = rrm()
    i = 0  # index of polys[]
    bns = 0
    #print("!", [row[~p] for row in polys])
    for c in xrange(l, r+1):
        while i+1 < len(polys) and c > A[i]+1:
            i += 1
        try:
            bns ^= polys[i][~p]
        except:
            pass
    print bns