#define yyy cout<<"Yes"<<"\n"
#define nnn cout<<"No"<<"\n"
#define x first
#define y second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll , ll> pii;
const int N = 2e6 + 10,inf = 0x3f3f3f3f,mod = 1e9 + 7;
struct node
{
int u,v;
double w;
}edge[N];
int n,m,p[N];
pii a[N];
double dist(int x,int y,int xx,int yy)
{
return sqrt((x - xx) * (x - xx) + (y - yy) * (y - yy));
}
int find(int x)
{
if(p[x] != x)
{
p[x] = find(p[x]);
}
return p[x];
}
void merge(int u,int v)
{
int fu = find(u),fv = find(v);
if(fu != fv)
{
p[fu] = fv;
}
}
bool cmp1(node a,node b)
{
return a.w < b.w;
}
bool cmp2(pii a,pii b)
{
return a.x < b.x;
}
bool check(double r)
{
for(int i = 1 ; i <= m ; i++)
{
if(a[i].x + r >= n)
{
return 1;
}
bool f = 0;
for(int k = m ; k >= i + 1 ; k--)
{
double x = dist(a[i].x , a[i].y , a[k].x , a[k].y);
if(x <= 2 * r)
{
f = 1;
i = k - 1;
break;
}
}
if(!f)
{
return 0;
}
}
return 1;
}
int main()
{
IOS;
cin>>n>>m;
for(int i = 1 ; i <= m ; i++)
{
cin>>a[i].x>>a[i].y;
}
sort(a + 1 , a + m + 1 , cmp2);
int cnt = 0;
for(int i = 1 ; i <= m ; i++)
{
for(int j = 1 ; j <= m ; j++)
{
double x = dist(a[i].x , a[i].y , a[j].x , a[j].y);
edge[++cnt] = {i , j , x};
}
}
for(int i = 1 ; i <= m ; i++)
{
p[i] = i;
}
sort(edge + 1 , edge + cnt + 1 , cmp1);
double maxn = max(a[1].x , n - a[m].x);
for(int i = 1 ; i <= cnt ; i++)
{
int u = edge[i].u,v = edge[i].v;
double w = edge[i].w;
u = find(u);
v = find(v);
if(u != v)
{
merge(u , v);
maxn = max(maxn , w * 1.0 / 2);
}
if(check(maxn))
{
break;
}
}
printf("%.2lf",maxn);
}