#include <iostream>
#include <algorithm>
#include <iomanip>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>

static const int MOD = 1000000007;
using ll = long long;
using u32 = uint32_t;
using namespace std;

template<class T> constexpr T INF = ::numeric_limits<T>::max() / 32 * 15 + 208;

int main() {
    int r, n;
    while(cin >> r >> n, r) {
        vector<int> v(25), u(25);
        for (int i = 0; i < n; ++i) {
            int p, q, h;
            cin >> p >> q >> h;
            for (int j = p; j < q; ++j) {
                if(j < 0){
                    u[-j-1] = max(u[-j-1], h);
                }else {
                    v[j] = max(v[j], h);
                }
            }
        }
        double ans = INF<int>;
        for (int i = 0; i < r; ++i) {
            v[i] = min(v[i], u[i]);
            ans = min(ans, r+v[i]-sqrt(r*r-i*i));
        }
        cout << ans << "\n";
    }

    return 0;
}
