#!/usr/bin/env python3 import collections # nacteni a naparsovani prvniho radku vstupu N, K = [int(x) for x in input().strip().split(' ')] # nacteni vsech ostatnich radku jako seznamu padajicich min miny = [input().strip().split(' ') for _ in range(K)] miny = [("{}{}".format(tvar, rot),int(pos)) for tvar, rot, pos in miny] # hraci plocha s vychozi hodnotou 0 # misto klasickeho pole zde pouzivam slovnik s vychozi hodnotou 0 # lze tak dosahnout daleko mensi spotreby pameti, pokud miny padaji # na jedno misto a vetsina sloupcu je prazdna plocha = collections.defaultdict(int) # pripravena tabulka tvaru tetromin vcetne vsech rotaci # protoze nepotrebujeme znat presne polohy jednotlivych kosticek # ukladam si po sloupcich nejnizsi bod a nejvyssi bod # # prikladem je treba L2, ktera vypada takto: # # ██ => hodnoty serazene jako sloupce zleva doprava: # █ [(nejnizsi volny 2, nejvyssi 3), # █ (nejnizsi volny 0, nejvyssi 3)] tvary = { "L0": [(0,3),(0,1)], "L1": [(0,2), (1,2), (1,2)], "L2": [(2,3), (0, 3)], "L3": [(0,1),(0,1),(0,2)], "J0": [(0,1),(0,3)], "J1": [(0,2), (0,1), (0,1)], "J2": [(0,3), (2, 3)], "J3": [(1,2),(1,2),(0,2)], "O0": [(0,2), (0,2)], "O1": [(0,2), (0,2)], "O2": [(0,2), (0,2)], "O3": [(0,2), (0,2)], "I0": [(0,4)], "I1": [(0,1),(0,1),(0,1),(0,1)], "I2": [(0,4)], "I3": [(0,1),(0,1),(0,1),(0,1)], "T0": [(1,2), (0,2), (1,2)], "T1": [(1,2), (0,3)], "T2": [(0,1), (0,2), (0,1)], "T3": [(0,3), (1,2)], "S0": [(0,1), (0,2), (1,2)], "S1": [(1,3), (0,2)], "S2": [(0,1), (0,2), (1,2)], "S3": [(1,3), (0,2)], "Z0": [(1,2), (0,2), (0,1)], "Z1": [(0,2), (1,3)], "Z2": [(1,2), (0,2), (0,1)], "Z3": [(0,2), (1,3)], } # nakonec projdu pres vsechny miny na vstupu for tvar, sloupec in miny: mina = tvary[tvar] # spocitam, kde mina narazi na existujici kosticky v hraci plose pro kazdy # sloupec zvlast # mina[i][0] odpovida nejvysimu nepouzitemu bloku v tetromine ve sloupci i kolizni_vysky = [ plocha[sloupec+i]-mina[i][0] for i in range(len(mina)) ] # vysledna kolizni vyska pak odpovida tomu sloupci, kde nastala kolize nejvyse vysledna_vyska = max(kolizni_vysky) # vyslednou pozici nove tetrominy ulozim do hraci plochy for i in range(len(mina)): plocha[sloupec+i] = vysledna_vyska + mina[i][1] # nakonec vytiskneme nejvyssi vysku print(max(plocha.values()))