#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cassert>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <functional>
#include <iostream>
#include <map>
#include <set>
using namespace std;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
typedef long long ll;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000001
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
ll dp[105][15][2]={};
bool x[15][10];
bool b[10][10]={};
ll DP[4][105]={};
int main()
{
	b[0][0]=b[0][1]=b[0][4]=b[0][6]=b[0][5]=b[0][2]=true;
	b[1][5]=b[1][2]=true;
	b[2][0]=b[2][2]=b[2][3]=b[2][4]=b[2][6]=true;
	b[3][0]=b[3][2]=b[3][3]=b[3][5]=b[3][6]=true;
	b[4][1]=b[4][2]=b[4][3]=b[4][5]=true;
	b[5][0]=b[5][1]=b[5][3]=b[5][5]=b[5][6]=true;
	b[6][0]=b[6][1]=b[6][3]=b[6][5]=b[6][6]=b[6][4]=true;
	b[7][0]=b[7][2]=b[7][5]=true;
	b[8][0]=b[8][1]=b[8][2]=b[8][3]=b[8][4]=b[8][5]=b[8][6]=true;
	b[9][0]=b[9][1]=b[9][2]=b[9][3]=b[9][5]=b[9][6]=true;
	int n,q; cin >> n >> q;
	for(int i=0;i<q;i++)
	{
		int a,b; cin >> a >> b;
		x[a+1][b] = true;
	}
	for(int i=0;i<10000;i++)
	{
		int a[5],bb=i;
		for(int j=0;j<4;j++)
		{
			a[4-j]=bb%10;
			bb/=10;
		}
		int p=0;
		for(int j=1;j<=4;j++)
		{
			for(int k=0;k<8;k++)
			{
				if(b[a[j]][k] && !x[j][k]) p++;
			}
		}
		if(i%400 == 0) dp[4][p][1]++;
		else if(i%100 == 0) dp[4][p][0]++;
		else if(i%4 == 0) dp[4][p][1]++;
		else dp[4][p][0]++;
	}
	for(int jj=0;jj<100;jj++)
	{
		if(!dp[4][jj][0]) continue;
		
		for(int i=1;i<=12;i++)
		{
			for(int j=1;j<=31;j++)
			{
				if((i==2&&j>28) || ((i==4||i==6||i==9||i==11)&&j>30)) continue;
				int q[15],yy=i,zz=j; int p=0;
				for(int ii=0;ii<2;ii++)
				{
					q[6-ii]=yy%10;
					yy/=10;
				}
				for(int ii=0;ii<2;ii++)
				{
					q[8-ii]=zz%10;
					zz/=10;
				}
				for(int k=5;k<=8;k++)
				{
					for(int l=0;l<8;l++)
					{
						if(b[q[k]][l] && !x[k][l]) p++;
					}
				}
				if(jj+p<=56) dp[8][jj+p][0] += dp[4][jj][0];
			}
		}
	}
	for(int jj=0;jj<100;jj++)
	{
		if(!dp[4][jj][1]) continue;
		
		for(int i=1;i<=12;i++)
		{
			for(int j=1;j<=31;j++)
			{
				if((i==2&&j>29) || ((i==4||i==6||i==9||i==11)&&j>30)) continue;
				int q[15],yy=i,zz=j; int p=0;
				for(int ii=0;ii<2;ii++)
				{
					q[6-ii]=yy%10;
					yy/=10;
				}
				for(int ii=0;ii<2;ii++)
				{
					q[8-ii]=zz%10;
					zz/=10;
				}
				for(int k=5;k<=8;k++)
				{
					for(int l=0;l<8;l++)
					{
						if(b[q[k]][l] && !x[k][l]) p++;
					}
				}
				if(jj+p<=56) dp[8][jj+p][1] += dp[4][jj][1];
			}
		}
	}
	//for(int i=57;i<99;i++) if(dp[8][i][0]+dp[8][i][1]>0) return 114514;
	for(int i=0;i<100;i++) DP[0][i] = dp[8][i][0]+dp[8][i][1];
	for(int i=99;i>=0;i--)
	{
		if(!DP[0][i]) continue;
		for(int j=0;j<24;j++)
		{
			int q[15],yy=j;  int p=0;
			for(int k=0;k<2;k++)
			{
				q[10-k] = yy%10;
				yy/=10;
			}
			for(int k=9;k<=10;k++)
			{
				for(int l=0;l<8;l++)
				{
					if(b[q[k]][l] && !x[k][l]) p++;
				}
			}
			if(i+p<=70) DP[1][i+p] += DP[0][i];
		}
	}

	for(int i=99;i>=0;i--)
	{
		if(!DP[1][i]) continue;
		for(int j=0;j<60;j++)
		{
			int q[15],yy=j;  int p=0;
			for(int k=0;k<2;k++)
			{
				q[12-k] = yy%10;
				yy/=10;
			}
			for(int k=11;k<=12;k++)
			{
				for(int l=0;l<8;l++)
				{
					if(b[q[k]][l] && !x[k][l]) p++;
				}
			}
			if(i+p<=84) DP[2][i+p] += DP[1][i];
		}
	}
	
	for(int i=99;i>=0;i--)
	{
		if(!DP[2][i]) continue;
		for(int j=0;j<60;j++)
		{
			int q[15],yy=j; int p=0;
			for(int k=0;k<2;k++)
			{
				q[14-k] = yy%10;
				yy/=10;
			}
			for(int k=13;k<=14;k++)
			{
				for(int l=0;l<8;l++)
				{
					if(b[q[k]][l] && !x[k][l]) p++;
				}
			}

			if(i+p<=98) DP[3][i+p] += DP[2][i];
		}
	}

	cout << DP[3][n] << endl; return 0;
}

Measured memory_bytes: 1172