#include<bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);i++)
#define REP(i,n) for(int i=1;i<=(n);i++)
#define mp make_pair
#define pb push_back
#define fst first
#define snd second
typedef long long ll;
typedef pair<int,int> pii;

const int maxn=255;
int n,mod,ans;
int dp[maxn*2][maxn];
pii a[maxn*2];
void Add(int &a,int b){
	a+=b;
	if(a>=mod)a-=mod;
}

int main(){
	scanf("%d%d",&n,&mod);
	rep(i,n)a[i]=mp(sqrt(n*n-1-i*i),-i);
	for(int i=n;i<2*n;i++)a[i]=mp(min(2*n-1,int(sqrt(4*n*n-i*i))),-i);
	sort(a,a+2*n);
	rep(i,2*n)a[i].snd=-a[i].snd;
	rep(k,n+1){
		int cnt=0;
		memset(dp,0,sizeof(dp));
		dp[0][0]=1;
		rep(i,2*n){
			rep(j,n+1){
				int cur=dp[i][j];
				if(!cur)continue;
				if(a[i].snd>=n&&a[i].snd<2*n)Add(dp[i+1][j],1LL*cur*max(a[i].fst+1-cnt-j,0)%mod);
				else{
					int nval=min(int(sqrt(4*n*n-a[i].snd*a[i].snd)),2*n-1);
					Add(dp[i+1][j],1LL*cur*max(nval+1-k-n-(i-cnt-j),0)%mod);
					Add(dp[i+1][j+1],1LL*cur*max(a[i].fst+1-cnt-j,0)%mod);
				}
			}
			if(a[i].snd>=n&&a[i].snd<2*n)cnt++;
		}
		if(k&1)Add(ans,mod-dp[2*n][k]);
		else Add(ans,dp[2*n][k]);
	}
	printf("%d\n",ans);
	return 0;
}