#include<bits/stdc++.h>
#define Fail puts("NO"),exit(0);
#define eps 1e-10
#define maxn 500
#define maxm 100010
#define inf 1000000007
//#define mod 998244353
#define pi acos(-1)
#define mp(x,y) make_pair(x,y)
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int>pii;
typedef bitset<maxn> bit;
int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch-'0'<0||ch-'0'>9){if(ch=='-') f=-1;ch=getchar();}
    while(ch-'0'>=0&&ch-'0'<=9){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int n,mod;
struct P{
    int id,l,r;
}a[maxn*2];
bool cmp(P a,P b)
{
    int x1=a.l,x2=a.r,y1=b.l,y2=b.r;
    if(a.id>=n)  swap(x1,x2);
    if(b.id>=n)  swap(y1,y2);
    if(x1!=y1)  return x1<y1;
    return x2<y2;
}
int f[2][maxn],ans;
void add(int &x,int y)
{
    x=(x+y>=mod)?(x+y-mod):x+y;
}
int main()
{
    n=read();mod=read();
    for(int i=0;i<=2*n-1;i++)
    {
        a[i+1].id=i;
        if(i>=n)  a[i+1].l=0;
        else      a[i+1].l=ceil(sqrt((double)(1ll*n*n-1ll*i*i)));
        a[i+1].r=min(2*n,(int)floor(sqrt((double)(4ll*n*n-1ll*i*i)))+1);
    }
    sort(a+1,a+2*n+1,cmp);
    for(int k=0;k<=n;k++)
    {
        memset(f,0,sizeof(f));
        int now=0,c1=0,c2=0;
        f[0][0]=1;
        for(int i=1;i<=2*n;i++)
        {
            for(int j=0;j<=k;j++)
            {
                if(!f[now][j])  continue;
                if(a[i].id>=n)
                {
                    add(f[now^1][j],1ll*f[now][j]*max(0,a[i].r-c1-j)%mod);
                }
                else{
                    add(f[now^1][j],1ll*f[now][j]*max(0,a[i].r-n-k-(c2-j))%mod);
					if(j<k)  add(f[now^1][j+1],1ll*f[now][j]*max(0,a[i].l-c1-j)%mod);
                }
				f[now][j]=0;
            }
			if(a[i].id>=n)  c1++;
			else            c2++;
            now^=1;
        }
        if(k&1)  add(ans,mod-f[now][k]);
        else     add(ans,f[now][k]);
    }
    printf("%d\n",ans);
    return 0;
}