#55分代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[4000],c[10000+10],p[100000];
struct node{
int x,y,z;
}b[100000];
bool cmp(node a,node b){
return a.z>b.z;
}
int main(){
int m,n;
scanf("%d%d",&n,&m);
for(int i=0;i<=m;i++){
a[i]=i*i;
}
int cnt=0;
for(int i=0;i<=m;i++){
for(int j=i;j<=m;j++){
if(!p[a[i]+a[j]]){b[++cnt].x=i;
b[cnt].y=j;
b[cnt].z=a[i]+a[j];
p[b[cnt].z]=1;
}
}
}
sort(b+1,b+cnt+1,cmp);
/*for(int i=1;i<=cnt;i++){
cout<<b[i].z<<" ";
}
cout<<endl;
for(int i=0;i<=100;i++){
cout<<p[i]<<" ";
}*/int fla=0;
for(int a=1;a<=b[1].z;a++){
for(int i=cnt;i>=1;i--){
int t=b[i].z,flag=0;
for(int j=1;j<n;j++){
if(!p[t-a]||t-a<0){
flag=1;
break;
}
t-=a;
}
if(!flag){printf("%d %d\n",t,a);
fla=1;}
}
}
if(!fla)cout<<"NONE";
return 0;
}