import scala.collection.mutable.ArrayBuffer

object Main extends App {
  val sc = new FastScanner(System.in)
  val n, q = sc.nextInt()
  val queries = List.fill(q)((sc.nextInt(), sc.nextInt()-1))

  var white = 0L
  var xs = ArrayBuffer[Int](0)
  var ys = ArrayBuffer[Int](0)
  val wx = Array.fill(n-1)(0L)
  val wy = Array.fill(n-1)(0L)
  wx(0) = n-2
  wy(0) = n-2
  var xmin = n-2
  var ymin = n-2

  def binSearch(a: ArrayBuffer[Int], begin: Int, end: Int, k: Int): Int = {
    if (end - begin <= 1) {
      end
    } else {
      val m = begin + (end - begin) / 2
      if (a(m) >= k) binSearch(a, begin, m, k) else binSearch(a, m, end, k)
    }
  }

  for ((z, i) <- queries) {
    if (z == 1) {
      val idx = binSearch(xs, 0, xs.size, i)
      val w = if (idx == 1) {
        xmin = i-1
        ymin
      } else {
        wx(xs(idx-1))
      }
      wx(i) = w
      white += w
      xs.insert(idx, i)
    } else {
      val idx = binSearch(ys, 0, ys.size, i)
      val w = if (idx == 1) {
        ymin = i-1
        xmin
      } else {
        wy(ys(idx-1))
      }
      wy(i) = w
      white += w
      ys.insert(idx, i)
    }
  }

  println((n-2).toLong * (n-2) - white)
}

class FastScanner(source: java.io.InputStream) {
  val buf = new Array[Byte](1024)
  var now, end = 0

  def isPrintable(b: Byte): Boolean = 33 <= b && b <= 126
  def isNum(b: Byte): Boolean = 48 <= b && b <= 57

  def hasNextByte: Boolean = {
    if (now < end) {
      true
    } else {
      now = 0
      end = source.read(buf)
      end > 0
    }
  }

  def nextByte(): Byte = {
    if (hasNextByte) {
      val b = buf(now)
      now += 1
      b
    } else {
      -1
    }
  }

  def hasNext: Boolean = {
    while (hasNextByte && !isPrintable(buf(now))) {
      now += 1
    }
    hasNextByte
  }

  def next(): String = {
    if (hasNext) {
      val sb = new StringBuilder()
      var b = nextByte()
      while (isPrintable(b)) {
        sb += b.toChar
        b = nextByte()
      }
      sb.toString
    } else {
      throw new NoSuchElementException()
    }
  }

  def nextInt(): Int = {
    nextLong().toInt
  }

  def nextLong(): Long = {
    if (hasNext) {
      var b = nextByte()
      var sign = 1
      var n = 0L
      if (b == '-') {
        sign = -1
        b = nextByte()
      }
      while (isNum(b)) {
        n = n * 10 + (b - 48)
        b = nextByte()
      }
      sign * n
    } else {
      throw new NoSuchElementException()
    }
  }

  def nextDouble(): Double = next().toDouble
}
