#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
struct node
{
int money;
double possibility;
}a[10005];
double dp[10005];
int main(){
int n,m;
while(scanf("%d%d",&n,&m)==2&&(m||n)){
memset(dp,0,sizeof(dp));
for(int i=1;i<=m;i++){
scanf("%d%lf",&a[i].money,&a[i].possibility);
}
for(int i=1;i<=m;i++){
for(int j=n;j>=a[i].money;j--){
dp[j]=max(dp[j],1-(1-dp[j-a[i].money])*(1-a[i].possibility));//dp数组保存的是前i-1个offer至少得到一个的概率,其实也就是概率当做每个物品的价值,花费当做重量
}
}
printf("%.1lf%%\n",dp[n]*100);
}
return 0;
}