#include<cstdio>
#include<vector>
#include<cmath>
#include<cstring>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
typedef long double D;

inline D dis(D x1, D y1, D x2, D y2){
  return sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
}

const D EPS = 1e-10;

int n,m;
D x[110],y[110],v[110];
D px[110],py[110];
D t[110][110];
int match[210];
bool use[210];
vector<int> g[210];

bool dfs(int v){
  use[v] = true;
  rep(i,g[v].size()){
    int u = g[v][i], w = match[u];
    if(w<0 || !use[w] && dfs(w)){
      match[v] = u;
      match[u] = v;
      return true;
    }
  }
  return false;
}

int bimatch(D lim){
  rep(i,n+m)g[i].clear();
  rep(i,n)rep(j,m){
    if(t[i][j] < lim + EPS){
      g[i].push_back(j+n);
      g[j+n].push_back(i);
    }
  }
  memset(match,-1,sizeof(match));

  int res = 0;
  rep(i,n+m){
    if(match[i]<0){
      memset(use,0,sizeof(use));
      if(dfs(i))res++;
    }
  }

  return res;
}

int main(){
  while(scanf("%d%d",&n,&m),n){
    rep(i,n)scanf("%Lf%Lf%Lf",&x[i],&y[i],&v[i]);
    rep(i,m)scanf("%Lf%Lf",&px[i],&py[i]);
    
    rep(i,n)rep(j,m){
      t[i][j] = dis(x[i],y[i],px[j],py[j])/v[i];
    }

    D l = 0, r = 1e8;
    rep(i,1000){
      D mid = (l+r)/2;
      if(bimatch(mid) == m)r = mid;
      else l = mid;
    }
    printf("%.20Lf\n",r);
  }
}